eMudhra 证书事件:浏览器拦住了,为什么应用还要检查?
eMudhra 中间 CA 私钥可被恢复。微软 10 月 27 日更新了 Edge 信任列表;但浏览器、系统工具和应用使用的信任机制可能不同,证书链也可能因此失效。
分别核对客户端实际使用的信任库、阻断更新和服务端证书链。浏览器已拦截不代表所有命令行、应用和离线设备都已获得相同保护。
相关信息
- 事件
- eMudhra 八个中间 CA 私钥可被恢复
- 用途
- 六个用于 TLS,另外两个用于代码签名
- 最新变化
- 微软称 10 月 27 日已从 Edge 信任列表移除七张关联证书
- 核实范围
- 依据文末官方公告;未逐一测试客户端或具体证书链
一条 HTTPS 证书链,信任是怎么传下来的
平时访问 HTTPS 网站,浏览器看到的是网站自己的证书。它不会只看证书上写的域名,还要验证是谁给这张证书签的名,并沿着证书链寻找本机认可的信任锚。常见链路可以理解成:根 CA 签发中间 CA,中间 CA 再签发网站证书。
中间 CA 的私钥因此很重要:如果攻击者拿到它,就可能自行签出一张冒充其他网站的证书。要借此窃听或篡改连接,还需要处在能够拦截或改变受害者连接的位置,并且目标客户端仍接受这条伪造链。
10 月 17 日,研究人员报告了 eMudhra 八个中间 CA 的私钥可被恢复。Google 和 Microsoft 分别说明,其中六个用于 TLS,另外两个用于代码签名。eMudhra 在 10 月 26 日的声明中称,问题来自生成流程中的脚本错误,完整根因分析仍在进行。
为什么拦截中间证书,还会影响别的证书
第一步是让客户端拒绝已知出问题的中间 CA。Chrome 使用 CRLSet 按公钥信息拦截;Firefox 使用 OneCRL。符合各自更新条件的客户端可以通过这些列表获得保护,而不一定要等到安装一个全新的浏览器版本。
但不是每个软件都会读取浏览器的拦截列表。于是厂商还调整了信任列表:Microsoft 称,10 月 26 日的 Windows 更新移除了关联证书,10 月 27 日 Edge 也移除了相同的七张证书,其中包括六张 eMudhra G3 根证书和一张 AAA Certificate Services 交叉签名证书。
撤销出问题的中间 CA 和移除根证书是两个动作。后者的影响范围可能更广:即使某张正常使用的网站证书不是由那八个中间 CA 签发,只要它最终依赖被移除的信任路径,也可能在更新后的客户端上验证失败。这不意味着根 CA 的私钥也被确认泄露。
同一条证书链,浏览器和命令行可能给出不同结果
证书验证不只发生在打开网页时。应用请求 API、构建程序下载依赖、服务器调用第三方服务,都需要判断对方的证书是否可信。差别在于:它们可能用操作系统的证书库,也可能带着自己的 CA 包、TLS 库或拦截列表。
Apple 的说明给出了一个具体例子:Safari 和使用 Apple 网络、安全框架的应用会自动获得拦截;部分 macOS 或 Xcode 命令行工具使用 /etc/ssl/cert.pem,在相应软件更新前可能仍接受受影响的链。Apple 提到可以由管理员提前调整,但删除共享根证书会影响其他依赖该根的正常网站,不能把它当成无差别的一键修复。
Google 也指出,某些 Flutter/Dart 应用的 TLS 验证逻辑编入应用本身。对公告列出的 Android、Windows 和 Linux 应用,需要使用修复版本重新构建和发布;只更新操作系统,并不会替换用户已经安装的应用二进制。具体平台和其他 Firebase 组件的修复版本以其支持指南为准。
怎么判断自己的服务有没有受影响
先分清两件事:你自己的服务端给别人提供什么证书链;你的应用作为客户端,又使用哪一套信任机制访问外部服务。前者关系到别人能否继续连接你的服务,后者关系到应用会不会接受伪造证书。
如果负责维护一个网站,可以从实际部署的服务端查看发出的证书。把下面命令中的 example.com 换成自己负责的域名;它显示的是服务器在这次握手中发送的证书,服务器不一定发送根证书。不要只凭“能连上”就认定所有客户端都信任这条链。
接下来结合证书指纹、签发者和平台公告核对完整验证路径,并分别检查浏览器、操作系统、容器和应用自带的信任库。交叉签名可能让同一中间证书连接到不同的根;仅查看网站证书显示的签发者名字,未必能看清实际使用的路径。
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null更新和更换分别解决什么问题
对使用 Windows 或 Edge 的环境,Microsoft 建议确保信任列表和浏览器组件更新能够送达,尤其要检查不能自动更新的离线设备。若业务证书链依赖其移除的证书,应与证书提供方确认替代证书或受支持的替代链,在相关客户端收到更新前完成迁移。
对自带 TLS 实现或证书包的程序,还要按运行时和 SDK 各自的公告处理。Go 团队为拦截受影响的中间证书发布了 Go 1.27.3 和 1.26.10;已经编译部署的程序需要结合其使用的 Go 版本与发行方式,评估更新、重新构建和发布。
不要为了让连接恢复,就直接把已被移除的信任关系加回来。Microsoft 特别提醒:如果应用没有可靠地检查吊销或拒绝列表,恢复信任可能让使用已泄露中间密钥伪造的证书再次通过验证。
关于“是否已经被利用”,目前能说到哪一步
这些私钥可恢复,说明存在伪造证书的能力;是否在某一环境中真正造成攻击,是另一项需要证据的问题。eMudhra 在 10 月 21 日表示,当时没有发现披露前已被恢复或利用的证据;其 10 月 26 日更新称,受影响的中间 CA 没有签发公开受信任的终端实体证书。
Google 则表示,在它完成拦截之前,六个受影响 TLS 中间 CA 没有可用的证书透明度日志记录,因此会强制检查证书透明度的客户端有一层额外保护。这个结论不能直接套给没有强制执行同样检查的应用、离线设备或代码签名场景。
资料来源
- Microsoft:10 月 27 日 Edge 和 Windows 信任列表更新 ↗
- Google:Chrome、Android 和证书透明度的处理 ↗
- Mozilla:Firefox 与 NSS 应对情况 ↗
- Apple:受影响证书与命令行工具说明 ↗
- Firebase:受影响应用与 SDK 更新 ↗
- Go 安全团队:运行时紧急更新与原因 ↗
- eMudhra:事件声明及调查进展 ↗
依据公告整理;未复现攻击,未验证具体客户端或服务的证书链。编辑与更正说明。
修订记录
2026-10-28:首次发布:解释中间 CA 风险、信任列表变化及应用与服务端的处理区别。