SSL 证书的危险
Source: Hacker News
Bazel SSL 证书过期事件
昨天,Google 的 Bazel 团队并没有度过一个非常愉快的节礼日。一个 SSL 证书为 ** 和 ** 过期,如下图所示,来源于 GitHub issue。
对用户的影响
过期的证书导致使用 Bazel 的用户的构建工作流中断,出现以下错误信息:
ERROR: Error computing the main repository mapping: Error accessing registry https://bcr.bazel.build/: Failed to fetch registry file https://bcr.bazel.build/modules/platforms/0.0.7/MODULE.bazel: PKIX path validation failed: java.security.cert.CertPathValidatorException: validity check failed
事件概述
在进行缓解后,Xùdōng Yáng 在 GitHub 工单上提供了简要的事件概述:
这是一场 自动续期被破坏 的事故,原因是新增了一些子域名,而续期失败并未发送任何通知,原因不明。
为什么 SSL 证书很危险
只要对任何资深软件工程师说出“过期的 SSL 证书”这几个字,就能看到他们的表情。业界每个人都曾被过期证书坑过,包括那些在使用自动证书续期的组织里工作的人。事实上,这次事件正是一次自动证书续期系统失效的例子!
- SSL 证书本质上是一项 危险 技术。
- 运营经验往往只有在出问题时才会积累。
- 当故障发生时,团队常常需要从头开始排查和修复。
- 在本次事件中,对这块领域非常陌生的 Bazel 团队成员不得不匆忙阅读文档并获取权限。
即便团队内部有本地的 SSL 证书专家,那些成员也因为假期不在办公室。使用“设置‑后‑忘记”的自动化方案时,知识不会在团队内部传播,因为它一直在“正常工作”——直到它停止工作。
故障模式特征
- 故障模式与优雅降级恰恰相反。
- 一分钟一切正常,下一分钟所有 HTTP 请求全部失败。
- 没有自然的信号提醒运维人员 SSL 证书即将到期。
- 由于变更是基于时间且会同时影响所有用户,无法进行分阶段(staging)测试。
换句话说,SSL 证书具有一种预期的故障模式(过期),会在 100 % 用户中产生硬性故障——而且运维人员没有任何自然反馈表明系统正处于即将出现关键故障的风险中。使用自动证书续期时,响应者缺乏证书续期经验的可能性会进一步增加。
这些问题不断“咬人”,难怪我们会感到惊讶。

