什么是证书透明度(CT)
证书透明度(Certificate Transparency,简称 CT)是一套由 Google 主导推动的公开审计框架,旨在解决 HTTPS 证书体系中长期存在的信任问题。在 CT 出现之前,证书颁发机构(CA)可能因为操作失误、被入侵或恶意行为,为某个域名签发未经授权的证书,而域名所有者对此一无所知。攻击者一旦获得这些非法证书,就可以对目标域名进行中间人攻击(MITM),解密看似安全的 HTTPS 流量。
CT 的核心思想非常简单:所有公开信任的 TLS 证书都必须记录在公开的、可审计的、仅可追加的日志中。这意味着每一张被主流浏览器信任的证书,都有一条公开可查的记录。域名所有者、安全研究人员乃至任何感兴趣的人,都可以通过查询这些日志来发现是否有异常证书被签发。
自 2018 年 4 月起,Apple 和 Google 相继要求所有新签发的公开信任证书必须支持 CT,否则浏览器将拒绝信任。这一强制性要求让 CT 从“可选的最佳实践”变成了 HTTPS 生态的基础设施。
CT 日志的工作原理
CT 生态由几个关键组件构成:
- CT 日志(CT Log):由独立的日志运营方维护的、仅可追加的 Merkle 树结构数据库。CA 在签发证书后,将证书提交到多个 CT 日志。
- SCT(Signed Certificate Timestamp):日志在接收证书后返回的签名时间戳,作为“已记录”的承诺凭证。SCT 会被嵌入到证书中,或通过 TLS 扩展、OCSP 装订等方式传递给客户端。
- 监控器(Monitor):持续抓取 CT 日志中的新条目,检测可疑或异常证书的第三方服务或自建工具。
- 审计器(Auditor):验证 CT 日志的一致性和完整性,确保日志运营方没有篡改历史记录。
当 CA 签发一张证书时,它需要将证书提交到多个 CT 日志,并获得对应的 SCT。浏览器在建立 TLS 连接时,会检查证书是否携带足够数量且来自合格日志的 SCT。如果没有,连接可能被拒绝。这一机制确保了证书的签发行为无法隐藏。
为什么需要监控域名证书
即使 CT 强制要求证书公开记录,异常签发仍然可能发生,原因包括:
- CA 操作失误:CA 可能因为配置错误或验证流程缺陷,为不属于申请者的域名签发证书。
- 内部威胁:CA 内部人员可能滥用权限签发未授权证书。
- CA 被入侵:攻击者攻破 CA 基础设施后,可以批量签发任意域名的证书。
- 钓鱼与品牌保护:攻击者可能为相似域名(如
examp1e.com)申请证书,用于钓鱼攻击。虽然这不是针对你的域名,但监控相似域名的证书签发有助于品牌保护。
对于企业而言,如果攻击者获得了你域名的合法证书,传统的浏览器安全警告将不会出现,用户和员工都难以察觉中间人攻击。因此,主动监控 CT 日志是 HTTPS 安全运营中不可或缺的一环。
如何监控 CT 日志
使用公开的 CT 查询服务
最简单的方式是使用现成的 CT 查询平台:
- crt.sh:由 Comodo 运营的免费 CT 日志搜索引擎,支持按域名、组织、指纹等条件查询。输入你的域名,即可看到所有已签发的证书列表。
- Google Certificate Transparency Report:Google 提供的 CT 监控服务,可以查看某个域名在 CT 日志中的记录。
- Censys 与 Shodan:这些互联网资产搜索引擎也集成了 CT 数据,可以按域名检索证书。
这些平台适合手动抽查,但无法做到实时告警。
配置自动化告警
对于生产环境,建议配置自动化监控与告警。常见方案包括:
-
CertStream:一个基于 WebSocket 的实时 CT 日志事件流。任何人都可以订阅
wss://certstream.calidog.io/,实时接收新证书事件。你可以编写简单的 Python 脚本,过滤包含自己域名的证书,并通过邮件、Slack 或 Webhook 发送告警。 -
自建监控脚本:利用 CT 日志的 API(如 Google 的
ct.googleapis.com/logs)轮询获取最新条目。结合域名白名单和证书指纹库,可以识别异常签发。示例逻辑:- 拉取最新 STH(Signed Tree Head)
- 获取新增条目
- 解析证书中的 SAN(Subject Alternative Name)
- 若发现包含目标域名但指纹不在白名单中,触发告警
-
商业监控服务:如 Facebook 的 Certificate Transparency Monitor、SSLMate 的 Cert Spotter、以及各大云厂商提供的证书监控功能。这些服务通常提供 API 和告警集成,适合没有自建能力的中小团队。
建立证书指纹白名单
为了减少误报,建议维护一份合法证书的指纹白名单。每次通过正规渠道签发证书后,将新证书的 SHA-256 指纹加入白名单。监控系统在发现新证书时,先与白名单比对,只有不在白名单中的证书才触发告警。这样可以有效过滤掉自己主动签发的证书,聚焦于真正的异常。
异常签发的响应流程
一旦监控系统发现异常证书,应立即启动响应流程:
- 确认证书详情:提取证书的序列号、签发 CA、有效期、SAN 列表、指纹等信息。
- 判断是否为误报:检查是否为自己或授权方签发的证书,是否属于子域名或关联域名。
- 联系 CA 吊销:如果确认是未授权证书,立即联系对应 CA 申请吊销。根据 CA/Browser Forum 基线要求,CA 应在收到合理证据后 24 小时内吊销证书。
- 提交浏览器厂商:如果 CA 不配合,可以向 Google、Apple、Mozilla 等浏览器厂商报告,它们有权将违规 CA 列入黑名单。
- 排查入侵迹象:异常签发可能意味着你的 DNS、邮箱或 CA 账户已被入侵,需全面排查。
- 通知用户与合作伙伴:如果证书已被用于攻击,及时通知可能受影响的用户。
小结
证书透明度为 HTTPS 生态带来了前所未有的可见性。通过 CT 日志,域名所有者可以实时掌握自己域名的证书签发情况,及时发现并响应异常签发。入门 CT 监控并不复杂:从 crt.sh 手动查询开始,逐步过渡到 CertStream 自动化告警,再结合指纹白名单和响应流程,就能构建一套有效的证书监控体系。在 HTTPS 已成为默认标准的今天,掌握 CT 监控技能,是每一位运维和安全从业者的必修课。
未经允许不得转载:任鹏个人博客 » 证书透明度(CT)日志入门:如何监控域名证书的异常签发


朋友圈点赞图在线生成源码