防止CA滥用职权——证书透明度(Certificate Transparency)

0. 前言

0.1. PKI 系统

PKI(Public Key Infrastructure,公钥基础设施)是一种基于公钥加密技术的安全体系结构,用于确保数据在传输过程中的安全性。PKI 体系结构包括证书颁发机构(CA)、注册机构(RA)、证书吊销列表(CRL)和证书库等组成部分。可以说,PKI 是保证网络安全的基础。

0.2. 原 PKI 系统的问题

PKI 系统可以有效防止中间人的攻击,但是这是建立在 CA 是可信的基础上的。然而,CA 也可能滥用职权,签发不安全的证书,从而导致中间人攻击。

最经典的就是 2011 年,荷兰的数字证书机构 DigiNotar 被入侵者利用其基础设施成功创建了超过 500 个欺诈性数字证书。最终,DigiNotar 宣告破产。

还有就是 2015 年,某国的互联网络信息中心被发现其子 CA 签发了 Google 的假证书,导致此 CA 被 Chrome、Firefox 等浏览器撤销信任。

0.3. 此问题的解决方案

Ben Laurie 和 Adam Langley 提出了证书透明度(Certificate Transparency,CT)的概念。这个行为是为了解决 CA 滥用职权的问题。

1. 证书透明度

1.1. 什么是证书透明度

CT 是一种公共日志系统,用于记录 CA 签发的 SSL 证书。这些日志是公开的,任何人都可以查看。这样一来,如果 CA 滥用职权,签发了本不应该签发的证书,那么这个证书就会被发现。

1.2. CT 的工作原理

CT 的工作原理如下:

1. 网站持有者向 CA 申请证书

这个步骤是域名持有者向 CA 申请证书。

2. CA 生成一份预证书(Pre-Certificate)

此时,CA 会先验证这个请求者是否有权利申请这个域名的证书。如果验证通过,CA 会生成一份预证书(Pre-Certificate)。

所谓的预证书,就是将要颁布的证书,其含有将要颁布证书的全部信息,不过他有一个额外的扩展,被称为毒扩展(Poison Extension)。这个扩展会告诉浏览器,这个证书是一个预证书,不是一个正式的证书,不能作为浏览器访问网站使用的 SSL 证书。

这样做的目的是为了阻止以下的死循环。

即:CA 想要登记实际要颁布的证书,那么这个证书需要有一个证书签名时间戳(Signed Certificate Timestamp,SCT)。但是获得 SCT 则又需要去登记这个证书,这样就会陷入死循环。

3. CA 将预证书提交到 CT 日志服务器

任何人都可以将证书提交到 CT 日志服务器,但大部分情况下提交者为 CA。

4. 将预证书加入日志(logs)

日志保存了所有提交的证书记录,日志具有以下特性:

  • 只能添加:证书只能添加到日志,不能删除,修改或者插入
  • 加密保证:日志使用哈希树(Merkle Tree)来保证证书的完整性,防止篡改
  • 可公开审查:任何人都可以查询日志并验证其是否存在问题,或者验证 SSL 证书或预证书是否在日志中。

哈希树,是一种简单的二叉树,具有叶子(leaves)和节点(nodes)。在 CT 中,叶子是已经添加到日志中一个整数的哈希值。节点是成对的叶子或成对的其他节点的哈希值。最源头的节点,也就是根节点,他的哈希值就可以代表整颗树的哈希值。

演示图如下(来自 Cloudflare):

哈希树

CT 日志服务器会定期的为根节点签名,形成一个签名树头(Signed Tree Head,STH)。这样就完成了对该树上所有证书的签名。

5. CT 日志服务器返回 SCT 给 CA

一般来说,每次记录的证书都会立刻返回一个 SCT,并且承诺在最大合并时间(Maximum Merge Delay,MMD)内将证书加入到日志中。

CA 会使用 X.509v3 扩展将 SCT 添加到证书中。(还有两种不常见的方式:TLS extension 和 OCSP stapling)

6. CA 将证书发送给域名持有者

CA 将证书发送给域名持有者,域名持有者将证书安装到服务器上。

7. 浏览器验证证书

假设此时有人访问了这个网站,例如 Chrome 或者 Safari,浏览器会验证 SCT 信息。每种浏览器对于 SCT 的要求不同,例如 Chrome 和 Safari 要求至少有两个 SCT。

8. 日志受到监督

CT 日志服务器会受到监督,这个监督是公开运行的服务器,他们会定期联系所有日志服务器,监视可疑证书。当然,个人也可以监视日志服务器。

1.3. 流程图

CT 流程图

2. 证书透明度现状

2.1. Chrome 强制要求 CT

根据 Google 的文档,于 2018.4.30 后颁布的证书,都需要有 CT 扩展,否则被认为是不安全的。

3. 证书透明度细节

3.1. 自签名证书的证书透明度

根据 Google 的文档,只有公开的 CA 才需要遵守 CT 规则,所以自签名证书不需要遵守 CT 规则。

4. 参考


防止CA滥用职权——证书透明度(Certificate Transparency)
https://nacldragon.top/2024/certificate-transparency/
作者
NaCl
发布于
2024年5月1日
许可协议