术语表

证书透明度 (Certificate Transparency,CT)

最后核实

定义

证书透明度(CT)是一套公开、只可追加的日志系统,记录所有公开信任的 TLS 证书,让任何人都能审计 CA 签发了什么。

证书透明度(CT)由 RFC 6962 定义,RFC 9162 是它的第二版。它要求 CA 把证书提交到公开的 CT 日志;日志以 Merkle 树组织,只能追加、不能改写。日志收到证书后返回 SCT(签名证书时间戳)作为收录承诺,SCT 一般直接嵌在证书里,也可以在握手时下发。监控方持续观察这些日志,任何人都可以检索。

为什么重要

没有 CT 的年代,某家 CA 给你的域名签了证书,除非被用于攻击,否则几乎没人知道。现在浏览器会拒绝没有有效 SCT 的证书:Chrome 要求 2018-04-30 之后签发的证书必须记入 CT,Apple 要求 2018-10-15 之后签发的证书必须记入。这样一来,错误签发无处隐藏,根证书计划决定是否继续信任某家 CA 时也有据可查,域名所有者能及时发现不是自己申请的证书。

例子

检查证书里是否嵌有 SCT:

openssl x509 -in cert.pem -noout -text | grep -A3 "CT Precertificate SCTs"

想查看 example.com 及其子域名历史上签发过的所有证书,可以使用 CT 检索工具。安全研究人员和攻击者也常用这种方法枚举子域名。

常见误区

  • CT 能阻止错误签发。 它只让签发过程公开可查,真正的预防靠 CAA、验证规则和审计。
  • 证书只在内网用,域名就不会泄露。 只要是公开信任的证书都会进入 CT 日志,SAN 里的域名随之公开;不想暴露的内部域名,请改用通配符证书或私有 CA。
  • CT 只和 CA 有关。 受益最多的其实是域名所有者,可以通过监控日志发现异常证书。

延伸阅读