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的核心思想是:让所有证书签发行为公开可见。

CT的工作流程如下:
- CA在签发证书前,先将"预证书"(precertificate)提交到公开的CT日志服务器
- 日志服务器返回一个签名证书时间戳(SCT),承诺在最大合并延迟(通常24小时)内将证书加入日志
- CA将SCT嵌入最终证书
- 浏览器验证证书是否包含有效的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级别的灾难,十五年只发生了一次。但这也意味着,互联网安全的基础,不是密码学的完美,而是统计学上的侥幸。
当你下次看到浏览器地址栏的锁图标时,记住:它代表的是一条脆弱的信任链,一个不断修补的系统,以及无数安全工程师的努力——而不是绝对的安全保证。
参考资料
- Fox-IT. (2012). Black Tulip: Report of the investigation into the DigiNotar Certificate Authority breach.
- EFF. (2011). A Post Mortem on the Iranian DigiNotar Attack.
- Scott Helme. (2017). Revocation is broken.
- Mike Malone. (2026). Everything you should know about certificates and PKI but are too afraid to ask. Smallstep.
- Certificate Transparency. How CT Works.
- Wikipedia. Certificate authority - Root certificates statistics.
- CA/Browser Forum. Baseline Requirements for TLS Server Certificates.
- Google Security Blog. (2017). Chrome’s Plan to Distrust Symantec Certificates.
- Mozilla Security Blog. (2015). Distrusting New CNNIC Certificates.
- Mozilla Security Blog. (2016). Distrusting New WoSign and StartCom Certificates.
- RFC 5280. Internet X.509 Public Key Infrastructure Certificate and CRL Profile.
- RFC 6962. Certificate Transparency.
- RFC 6844. DNS Certification Authority Authorization (CAA).
- Let’s Encrypt. (2025). 10 Years of Let’s Encrypt Certificates.
- SSLMate. Timeline of Certificate Authority Failures.