证书透明度 - HTTPS 信任背后的公开审计系统

即使通信使用 HTTPS 加密,如果服务器出示的 TLS 证书是欺诈性签发的,加密就毫无意义。如果攻击者入侵了证书颁发机构(CA)并获取了伪造证书,就可以冒充合法域名拦截通信。

证书透明度(CT)是 Google 针对这一问题提出的解决方案。通过将所有 TLS 证书的签发记录在任何人都可以审计的公开日志中,实现对欺诈性签发证书的快速检测。自 2018 年 4 月起,Chrome 不再信任未在 CT 日志中注册的证书。

为什么需要证书透明度

CT 源于 CA 信任模型固有的结构性问题。

CA 信任模型的脆弱性

浏览器将数百个 CA 注册为"受信任的根 CA"。这些 CA 中的任何一个都有权为任何域名签发证书。这意味着只要一个 CA 被攻破,整个互联网的 HTTPS 信任就可能崩溃。

真实的欺诈签发事件

  • DigiNotar 事件(2011):荷兰 CA DigiNotar 被入侵,为包括 google.com 在内的 500 多个域名签发了伪造证书。据报道被伊朗政府用于拦截 Gmail 用户的通信。DigiNotar 失去信任后破产
  • Symantec 误签发(2015-2017):Symantec 旗下的 CA 被发现在未经域名所有者批准的情况下签发了大量测试证书。Google 逐步撤销了对 Symantec 证书的信任
  • CNNIC 事件(2015):中国的 CNNIC 不当委托了中间 CA 证书,该中间 CA 为 Google 域名签发了伪造证书

这些事件表明,仅仅"信任"CA 是不够的,需要一种持续监控已签发证书的机制。

CT 的技术原理

CT 由三个组件构成。

1. CT 日志服务器

CT 日志是只能追加的数据结构,按时间顺序记录所有已签发的证书。它们使用 Merkle 哈希树,使得篡改已记录的条目在计算上不可行。

当 CA 签发证书时,会将证书提交给至少两个独立的 CT 日志服务器。日志服务器记录证书并返回 SCT(签名证书时间戳),一个签名的时间戳,证明"此证书已被记录在 CT 日志中"。

2. 监控器

监控器是定期扫描 CT 日志以检测可疑证书签发的系统。域名所有者可以使用监控器来监视为其域名签发的证书。

例如,如果你拥有 example.com,可以监控 CT 日志,在未经你授权的情况下为 example.com 签发证书时立即检测到。

3. 审计器

审计器验证 CT 日志服务器是否正常运行。它们通过密码学方法验证日志的一致性(过去的条目未被篡改)以及与 SCT 对应的条目确实存在于日志中。浏览器也可以充当审计器。

浏览器对 CT 的强制执行

CT 的有效性由浏览器强制要求 CT 日志注册来保证。

  • Chrome:2018 年 4 月 30 日之后签发的证书如果未在 CT 日志中注册则不被信任。根据证书的有效期,需要 2-3 个 SCT
  • Safari:Apple 也建立了自己的 CT 政策,在 Safari 中强制执行 CT
  • Firefox:CT 强制执行正在逐步引入

如果你访问的网站的证书未在 CT 日志中注册,浏览器会显示"你的连接不是私密的"等警告并阻止连接。

使用 CT 日志 - 域名所有者能做什么

CT 日志是公开的,任何人都可以搜索。域名所有者可以使用以下工具监控其域名的证书签发情况。

  • crt.sh:由 Sectigo 运营的 CT 日志搜索引擎。按域名搜索可列出为该域名签发的所有证书
  • Google Certificate Transparency Search:Google 提供的 CT 日志搜索工具
  • Certspotter:SSLMate 的 CT 监控服务,在签发新证书时发送电子邮件通知

建议定期检查你的域名的证书签发状态,验证是否有未经授权的证书被签发。如果发现伪造证书,请向签发 CA 请求撤销。

CT 与隐私的权衡

由于 CT 日志是公开信息,也存在隐私方面的顾虑。

  • 证书中包含的域名(包括子域名)会被公开。内部系统的子域名(如 staging.internal.example.com)可能会暴露给外部
  • 攻击者可以监控 CT 日志来发现新的子域名并将其作为攻击目标
  • 使用通配符证书(*.example.com)可以防止暴露单个子域名

这种权衡需要在 CT 透明度带来的安全收益与子域名暴露的风险之间进行衡量。在大多数情况下,检测伪造证书的能力比保密子域名更重要。

与 CAA 记录的结合

配合 CT,设置 DNS CAA(证书颁发机构授权)记录可以进一步降低伪造证书签发的风险。

CAA 记录在 DNS 层面限制哪些 CA 可以为域名签发证书。例如,只允许 Let's Encrypt 签发证书:

example.com. IN CAA 0 issue "letsencrypt.org"

设置 CAA 记录后,指定以外的 CA 无法签发证书(根据 RFC 8659,CA 有义务在签发前检查 CAA 记录)。CT 日志用于事后检测,CAA 记录用于事前限制,两者结合实现纵深防御。

总结

证书透明度是支撑 HTTPS 信任基础的关键基础设施。它基于 CA 可能被攻破的假设而设计,通过将所有证书签发记录在公开日志中,实现对伪造证书的快速检测。

建议域名所有者使用 crt.sh 等工具定期监控域名的证书签发状态,并设置 CAA 记录限制可签发证书的 CA。使用 IP 确认酱验证你的连接是否受到 HTTPS 保护,结合适当的安全头配置,全面加强 Web 通信的安全性。

相关术语

HTTPS 在 HTTP 基础上添加 TLS/SSL 加密的通信协议。防止窃听和篡改,并通过证书验证服务器真实性。 TLS(传输层安全) 加密互联网通信的协议。SSL 的后继者,当前 HTTPS 的基础技术。TLS 1.3 是最新版本。 证书颁发机构(CA) 签发 TLS 证书的受信任第三方。验证域名所有者身份并签署公钥以保证网站真实性。 DNS(域名系统) 将域名转换为 IP 地址的互联网基础系统。浏览器访问网站时首先查询的系统。 加密 将数据转换为第三方无法读取的格式的技术。分为对称加密和非对称加密两种方法,保护通信机密性和数据完整性。