用户登录

技术文章

外部链接将在新标签页打开。

证书轮换别从换证开始:eMudhra 弱密钥事件的取证顺序与检查清单

一句话回答

Cloudflare 披露的 eMudhra 事件显示,受影响的是八把弱密钥而非四把;更稳妥的顺序是先固定密钥标识与证据、立即封禁弱密钥链,再清点信任面、加日志和探针,最后换证与复盘。现有探针数据有样本偏差,不能当作全网精确修补率。

先给结论:材料正文列出的 eMudhra 弱密钥是八把,不是四把;从正文看,标题里的“4”指其中最显眼的密钥值 4,也是双关。证书轮换不能从“换证”开始,而应先确认受影响密钥与信任链、立即让客户端拒绝弱密钥,再清点所有信任面、加日志与探针,最后才做常规换证和复盘。

据 Cloudflare 2026 年 10 月 30 日的披露,2026 年 10 月 19 日他们得知 eMudhra 的八个弱密钥:4、56、66、115、155、156、230、237。这些是中间证书私钥;由于密钥空间过弱,私钥可从公开证书本身恢复,任何拿到公开证书的人都能重算。这意味着风险不限于“某个 CA 被入侵后少数攻击者能签发证书”,而是未修补且不强制证书透明度(Certificate Transparency,CT)的客户端可能接受任何人用同一弱密钥伪造的证书。来源:Cloudflare 博客

这也解释了为什么“四把”不能当封禁清单。按材料列出的值,只封 4 会漏掉另外七个。取证和修补的第一步应是列出全部受影响的公钥指纹、中间证书标识和签发链,而不是只按 CA 名称或单个密钥值做黑名单。

为什么不能先大规模换证#

常规证书事件里,换证往往是主要动作;这里不是。弱密钥是信任根上的问题:只要客户端还信任这些中间证书,攻击者就能继续签发新证书,服务端换自己的证书并不能让未修补客户端拒绝伪造证书。Cloudflare 文章提到,他们看到的一张伪造证书日期为 2026 年 10 月 20 日 18:19 UTC,距 Mozilla 的 bug 报告公开不到一小时。这个时间点说明,公开后很快就会出现伪造尝试。先封禁弱密钥链、再换证,顺序更稳。

据 Cloudflare 转述,eMudhra 已宣布退出公共 CA 业务,并称密钥生成脚本有错误,但尚未分享该脚本;他们还曾用可能是正确生成的密钥签了一份证书吊销列表(CRL),随后又改为用弱密钥签。审计方和交叉签名方的角色也仍待澄清。这些说法来自 Cloudflare 的披露,eMudhra 脚本与审计结论在本次材料中没有给出,待核实。

建议的取证与轮换顺序#

  1. 先固定最小证据集。记录受影响中间证书的公钥指纹、Subject Key Identifier、序列号、首次公开时间、CT 日志线索和内部证书库存查询结果。止血要同时进行,但先明确“封什么”,避免清理时把日志和样本一起删掉。
  2. 立即止血:拒绝弱密钥链。在出站和入站的 TLS 信任配置中拒绝由这些弱密钥签发的链;更新操作系统、浏览器、运行时、容器基础镜像和 HTTP 客户端。只改浏览器不够,服务端调用第三方 API 的出站信任库同样要查。
  3. 清点所有信任面。代理、服务网格、SDK、CI/CD、嵌入式设备、桌面客户端、远程接入产品都可能各自维护信任库。Cloudflare 称其在 10 月 19 日开始修补高影响系统,包括用 Pingora 的客户源站出站代理,数小时内拒绝弱密钥;同时用 AI 辅助源码分析,四小时内完成全量分析。Cloudflare 还称,截至其文章写作时所有高优先级系统已修补,少量低影响工单仍在处理。这是 Cloudflare 的内部流程,不是行业通用时限。
  4. 加日志,区分“呈现”与“成功”。Cloudflare 在 Pingora 增加日志,记录对端是否呈现弱密钥签发的证书,10 月 21 日完成上线。文章写作时约一周内看到约 2.2 万次弱密钥握手尝试;其中约三分之二是对测试站点的访问,剩余几乎都是源站给自己配置了由弱中间签发的证书。这些数字是 Cloudflare 网络中的握手尝试,不等于拦截成功数。
  5. 用探针评估客户端修补,但声明偏差。Cloudflare 在部分挑战页发出两个探针连接,一周约 5000 万次,观察客户端是否接受弱密钥链。样本只覆盖会执行 JavaScript 的挑战页客户端,且含未确认机器人,不能当作全网随机抽样。其观察是:现代浏览器大多已修补,Android WebView 仍有 30%–40% 接受;大网络(ASN)中超过半数探针仍接受受损链;周末后趋势基本走平。
  6. 取证分析要分清三类证据。握手尝试、证书呈现、实际拦截成功是不同层级。Cloudflare 看到约 160 个握手中出现的证书 SAN 指向其他组织域名,部分与消费级 IoT 有关,且部分伪造证书有效期超过两年;但这些证书更像服务器默认证书,主机名验证本会失败,多个位置看到同一证书也说明它来自服务器本身。Cloudflare 称尚未发现弱密钥被用于拦截其连接的证据,但不能排除定向拦截,也未看到系统失陷的间接信号。
  7. 复盘撤销与供应链。检查 CRL、OCSP、CT 强制和快速撤销机制是否真的可用;追问 CA 的密钥生成、审计和交叉签名证据。eMudhra 的脚本未公开前,不宜自行断言根因。

这些证据能说明什么,不能说明什么#

证据能说明不能说明
约 2.2 万次弱密钥握手尝试(Cloudflare 网络,日志上线后约一周)有客户端或服务器在呈现弱密钥链是否成功拦截,或攻击者是否得手
约 160 个握手出现异常 SAN 证书公开后数小时内已出现伪造证书是否针对 Cloudflare 的定向拦截
约 5000 万次挑战页探针(一周)特定客户端群体的修补差异全网精确修补率

一个容易误读的点是“全网修补进度”。Cloudflare 的探针显示的是访问其挑战页的客户端;它足以说明修补不均衡,尤其嵌入式和旧客户端滞后,但不足以给出全网上限或下限。文章还提到 10 月 29 日检测到大量伪装成 macOS 上 Chrome 150–154 的机器人流量,这会改变流量分类,看起来像修补率上升;Linux 上同版本 Chrome 的接受率继续下降,但作者也把它称为提示性而非结论性证据。来源同上:Cloudflare 博客。

开发者检查清单#

  • 用公钥指纹或 SPKI 哈希标识受影响中间证书,不要只按 CA 名称封禁。
  • 检查所有运行时和镜像:JVM、Python、Node.js、Go、容器基础镜像、服务网格、CI 节点。
  • 同时检查入站和出站 TLS;调用第三方 API 的 HTTP 客户端也要更新信任库。
  • 记录对端证书链的签发者与指纹,设置告警;控制日志量和隐私范围。
  • 验证“旧链被拒绝”,而不只是“新证书已部署”;保留回滚路径。
  • 对探针和统计声明样本、时间窗和偏差,不要把内部数据外推成全网结论。

对 API.PLUS 这类 API 接入场景,本文没有调用或测试任何 API.PLUS 端点;可复用的是顺序:先确认调用方运行时和镜像的信任库版本,再验证弱密钥链确实被拒绝,最后才讨论业务侧换证。证书轮换不是把文件替换掉就结束,取证顺序决定了你是否知道旧信任还在哪里。

结论:eMudhra 事件的关键不是“四把密钥”这个标题,而是弱密钥让信任链可被公开重算。更稳妥的顺序是:固定密钥标识与证据、立即封禁弱密钥链、清点信任面、加日志与探针、区分证据层级、最后换证和复盘。Cloudflare 的数据能证明暴露与修补不均衡,但不能证明全网已经修完;截至其文章写作时,仍有大量探针客户端接受受损链。

参考来源

  1. 4 real? Tracking exploitation and patching of eMudhra’s weak keys

以上为本文写作时的参考资料,引用观点以原文为准。

作者:沐小悠

本文约 8 分钟读完 · 关键词:eMudhra、弱密钥、证书轮换、取证顺序、TLS 信任库

更多文章 GET 示例接口

「」标签下的其他文章