2011年8月28日,一名伊朗用户在访问Gmail时发现浏览器显示的证书异常。这条看似微不足道的线索,揭开了一场影响超过30万人的大规模中间人攻击。攻击者不是破解了加密算法,也没有入侵Google的服务器——他们只是拿到了一张合法的证书。

这张证书来自荷兰的DigiNotar证书授权机构(Certificate Authority,CA)。攻击者完全控制了DigiNotar的CA服务器,为google.com、mozilla.com、microsoft.com等数百个域名签发了伪造证书。更致命的是,DigiNotar在发现入侵后选择了隐瞒,直到攻击被公开才被迫承认。

这不是一个孤立的案例。从2011年的DigiNotar和Comodo,到2015年的CNNIC和Superfish,再到2017年的Symantec——过去十五年里,证书授权机构的信任危机从未停止。每一次事件都在追问同一个问题:我们为何将整个互联网的安全,托付给这样一个脆弱的体系?

信任链:一个看似优雅的设计

理解PKI(Public Key Infrastructure,公钥基础设施)的结构性缺陷,必须先理解它的设计逻辑。

TLS/SSL证书的核心目的非常简单:将一个域名绑定到一个公钥。当你访问example.com时,服务器会出示一张证书,声称"example.com的公钥是X"。你的浏览器需要验证这个声明是否可信。

问题是:谁来担保这个声明?这就是证书授权机构(CA)的角色。CA用自己的私钥对证书签名,浏览器预先信任了一批CA的公钥(存储在信任存储中)。验证过程形成一条链条:服务器证书由中间CA签发,中间CA由根CA签发,根CA被浏览器信任。

证书信任链示意图

图片来源: smallstep.imgix.net

这套设计的优雅之处在于:你不需要事先知道每一个网站的身份,只需要信任少数几个根CA,就能验证全球数十亿张证书。但优雅的背后,隐藏着致命的结构性假设。

一百个攻击面

截至2020年8月,Mozilla Firefox信任147个根证书,代表52个组织;Windows信任168个根证书;Apple和Google维护各自的信任存储。这些数字看似不大,但每一个根证书背后的CA都拥有签发任意域名证书的能力。

这是一个令人不寒而栗的事实:互联网上任何HTTPS网站的安全性,都取决于这些CA中安全最薄弱的那一个。攻击者不需要破解你的服务器、不需要偷你的私钥——只需要入侵任意一个CA,就能获得你网站的"合法"证书。

DigiNotar事件完美诠释了这种脆弱性。2011年6月17日,攻击者入侵了DigiNotar的网络。Fox-IT的审计报告显示,DigiNotar的所有CA服务器都在同一个Windows域中,攻击者获取域管理员权限后,可以访问所有服务器的私钥。攻击者签发了531张伪造证书,覆盖Google、Mozilla、Microsoft、Twitter等主要网站。

但DigiNotar真正的问题不是安全措施薄弱——每个CA都可能被入侵——而是信任体系的容错能力为零。一旦一张伪造证书进入生态系统,没有任何机制可以快速阻止它被使用。

证书吊销:一条断裂的安全带

当私钥泄露或证书被误发,理论上的补救措施是吊销证书。但吊销机制的实际运作,堪称安全领域最尴尬的设计之一。

证书吊销有两种标准机制:CRL(Certificate Revocation List,证书吊销列表)和OCSP(Online Certificate Status Protocol,在线证书状态协议)。

CRL的问题显而易见:CA维护一个包含所有已吊销证书的列表,浏览器需要下载并缓存这个列表。大型CA的CRL可能包含数十万条记录,文件体积达数MB。更关键的是,CRL的更新存在延迟——浏览器不会每次连接都重新下载。

OCSP试图解决CRL的效率问题:浏览器实时查询CA的OCSP服务器,询问某张特定证书的状态。但这带来了两个新问题:

首先是隐私问题。当你向CA查询"mail.google.com的证书是否有效"时,你实际上在告诉CA你正在访问Gmail。CA可以建立你的浏览历史档案。

其次是"软失败"(Soft Fail)困境。如果OCSP服务器不可用(可能是网络问题,也可能是攻击者故意阻断),浏览器该怎么处理?拒绝连接意味着用户无法访问网站;继续连接意味着吊销检查形同虚设。

现实是,主流浏览器选择了软失败——或者干脆不做检查。Chrome完全不做在线吊销检查。Firefox和Safari虽然检查,但如果服务器无响应,会静默继续。

Google的Adam Langley对此有一个精彩的比喻:证书吊销就像"车祸时会断裂的安全带"。你每天都系着它,感觉安全,但真正出事故的那一刻,它救不了你。

历史的教训:信任是如何被滥用的

DigiNotar不是唯一一个被信任体系除名的CA。过去十五年的CA事件揭示了一个规律:信任的滥用有多种形式,但后果同样严重。

Comodo(2011年3月):一名攻击者通过注册商的合作伙伴账户,为google.com、login.live.com等域名申请了9张伪造证书。攻击者后来声称来自伊朗。与DigiNotar不同,Comodo立即披露了事件,未造成大规模影响。

CNNIC(2015年3月):中国互联网络信息中心(CNNIC)授权一家埃及公司运营中间CA,该公司为google.com签发了伪造证书。Google Chrome的证书固定(Certificate Pinning)机制检测到了异常。CNNIC最终被Chrome和Firefox移除信任。

Trustwave(2012年2月):这不是一次攻击,而是CA主动出售信任。Trustwave承认曾向一家企业客户出售中间根证书,允许该客户签发任意域名的证书——用于企业内部的SSL解密和监控。这暴露了一个更深层的问题:CA的商业利益与安全责任存在内在冲突。

WoSign和StartCom(2016年):中国的WoSign收购了以色列的StartCom,但隐瞒了这一关系。更严重的是,WoSign存在倒签证书日期(backdating)等问题,为已过期的SHA-1证书伪造签发日期。Apple、Google、Mozilla最终同时移除了对这两家CA的信任。

Symantec(2017年):作为当时最大的商业CA之一,Symantec多次违规:签发测试证书、未正确验证申请者身份、签发不符合规范的证书。Google最终决定逐步取消对Symantec证书的信任,Symantec的CA业务被DigiCert收购。

这些事件的共同点是:CA的错误行为,最终都是由浏览器厂商来纠正。这个体系缺乏有效的问责机制。

证书透明度:阳光作为防腐剂

2013年,Google提出了证书透明度(Certificate Transparency,CT)机制,试图从根本解决这个问题。CT的核心思想是:让所有证书签发行为公开可见。

证书透明度架构

图片来源: certificate.transparency.dev

CT的工作流程如下:

  1. CA在签发证书前,先将"预证书"(precertificate)提交到公开的CT日志服务器
  2. 日志服务器返回一个签名证书时间戳(SCT),承诺在最大合并延迟(通常24小时)内将证书加入日志
  3. CA将SCT嵌入最终证书
  4. 浏览器验证证书是否包含有效的SCT

CT日志使用Merkle树结构,这是一种只能追加、不能删除的数据结构。任何人都可以审计日志,验证其一致性。域名所有者可以监控日志,发现针对自己域名的未授权证书签发。

CT的效果是显著的。2015年之前,伪造证书可以在黑暗中存活数月甚至数年。2015年之后,任何签发行为都会被记录在案。Facebook等公司提供了免费的CT监控服务,域名所有者可以收到针对其域名的证书签发通知。

但CT不是万能药。它解决的是"发现"问题,不是"阻止"问题。攻击者仍然可以签发伪造证书,只是很难不被发现。CT也不解决吊销问题——即使你发现了伪造证书,吊销机制仍然不可靠。

其他补丁:CAA、HSTS与固定

在CT之外,安全社区引入了更多防护措施。

CAA记录(2013年):域名所有者可以通过DNS发布CAA记录,指定哪些CA有权为其签发证书。例如,example.com CAA 0 issue "letsencrypt.org"表示只有Let’s Encrypt可以签发example.com的证书。但CAA的保护有限——攻击者如果控制了DNS,就能修改CAA记录;而且CAA依赖CA自愿遵守。

HSTS(2009年):HTTP Strict Transport Security让网站告诉浏览器"永远使用HTTPS连接"。这防止了SSL剥离攻击,但无法防止伪造证书。

证书固定(Certificate Pinning):网站可以告诉浏览器"只接受特定的证书或公钥"。这提供了最强的保护,但也带来了运营风险——如果证书过期或私钥丢失,用户可能无法访问网站。Chrome曾对Google等少数网站实施固定,这正是DigiNotar攻击被检测到的原因。但Chrome在2017年移除了公开固定功能,因为维护成本太高。

Let’s Encrypt:免费不等于安全

2015年12月,Let’s Encrypt进入公测,开创了免费、自动化证书签发的先河。到2025年,它已成为全球最大的证书授权机构,签发了超过30亿张证书。

Let’s Encrypt的诞生改变了证书生态:HTTPS部署成本从每年数百美元降至零,推动了整个互联网的加密化。但它也带来了新的思考。

Let’s Encrypt只签发DV(Domain Validation,域名验证)证书——验证申请者控制该域名即可。它不验证申请者的组织身份。这意味着,如果你能控制某个域名的DNS或Web服务器,就能获得该域名的合法证书。

这不是Let’s Encrypt的缺陷,而是DV证书的设计特性。但它说明了一个更广泛的问题:证书验证的是域名控制权,不是网站所有者的身份。一张有效的HTTPS证书,只能证明你在与域名控制者通信,不能证明这个控制者是谁。

EV(Extended Validation,扩展验证)证书提供更强的身份验证,CA需要验证申请者的法律实体身份。但浏览器对EV证书的显示越来越低调——Chrome和Firefox都已移除地址栏的EV标识。身份验证的边际价值,似乎不如普及加密来得重要。

信任的未来:没有万全之策

回顾PKI二十年的演进,没有一项改进是完美的,每一项都带来新的权衡:

  • CT解决了发现问题,但增加了CA的运营成本和延迟
  • CAA提供了域名级别的控制,但依赖DNS安全
  • 缩短证书有效期减少了暴露窗口,但增加了运维复杂度
  • 证书固定提供了最强保护,但维护成本高昂

2018年,CA/Browser Forum将证书最长有效期从三年缩短至两年;2020年,进一步缩短至一年。更短的寿命意味着即使私钥泄露,攻击者的窗口也更短。但这也意味着更频繁的证书更新——没有自动化工具,运维将成为噩梦。

浏览器厂商也在探索替代方案。Chrome的Certificate Transparency强制要求、Firefox的OneCRL机制、Apple的信任存储更新,都是不同层面的补救措施。但核心矛盾依然存在:任何需要人类参与的信任体系,都不可避免地会犯错

或许最诚实的回答是:HTTPS从来没有承诺绝对安全。它承诺的是,在大多数情况下,你的连接不会被大多数攻击者轻易破解。信任链的设计基于一个实用主义假设——CA犯错是小概率事件,浏览器可以事后纠正。

这个假设大体上是对的。每一天,数十亿次HTTPS连接正常建立。DigiNotar级别的灾难,十五年只发生了一次。但这也意味着,互联网安全的基础,不是密码学的完美,而是统计学上的侥幸

当你下次看到浏览器地址栏的锁图标时,记住:它代表的是一条脆弱的信任链,一个不断修补的系统,以及无数安全工程师的努力——而不是绝对的安全保证。


参考资料

  1. Fox-IT. (2012). Black Tulip: Report of the investigation into the DigiNotar Certificate Authority breach.
  2. EFF. (2011). A Post Mortem on the Iranian DigiNotar Attack.
  3. Scott Helme. (2017). Revocation is broken.
  4. Mike Malone. (2026). Everything you should know about certificates and PKI but are too afraid to ask. Smallstep.
  5. Certificate Transparency. How CT Works.
  6. Wikipedia. Certificate authority - Root certificates statistics.
  7. CA/Browser Forum. Baseline Requirements for TLS Server Certificates.
  8. Google Security Blog. (2017). Chrome’s Plan to Distrust Symantec Certificates.
  9. Mozilla Security Blog. (2015). Distrusting New CNNIC Certificates.
  10. Mozilla Security Blog. (2016). Distrusting New WoSign and StartCom Certificates.
  11. RFC 5280. Internet X.509 Public Key Infrastructure Certificate and CRL Profile.
  12. RFC 6962. Certificate Transparency.
  13. RFC 6844. DNS Certification Authority Authorization (CAA).
  14. Let’s Encrypt. (2025). 10 Years of Let’s Encrypt Certificates.
  15. SSLMate. Timeline of Certificate Authority Failures.