[控场AI]
· 5 分钟阅读· 2,824 字

CA机构私钥竟为"4":一次证书事故如何让curl集体失守

CA机构私钥竟为"4":一次证书事故如何让curl集体失守

印度CA机构eMudra生成私钥为“4”的证书,浏览器快速吊销但系统证书库未同步,导致curl等工具仍信任被撤销证书,暴露HTTPS信任链结构性裂缝。

印度CA机构eMudra在密钥签名仪式中生成八把NIST P-384私钥,私钥竟为47字节的零(近似于“4”),等同于公开私钥,可被用于冒充任意站点。浏览器厂商在24小时内完成吊销与更新,但系统级证书库(如ca-certificates.crt)未同步,导致curl、git、Python等大量工具仍信任被撤销的证书。演示显示Chrome拦截的恶意站点,curl仍能正常取回内容,使得curl | bash和npm install等操作存在被投毒风险。事故暴露了浏览器快速响应与开源工具链、CI环境、容器镜像更新滞后之间的结构性不对称,且私钥在长达一年多时间内处于可滥用状态,引发对默认安全假设的反思。

CA机构私钥竟为"4":一次证书事故如何让curl集体失守

一个浏览器早已拉黑的网站,curl 却毫无防备地把内容原样吐了出来——没有警告、没有拦截,甚至连一句提示都没有。这不是某个人配错了环境,而是整条信任链条上最不该出问题的一环,出了最离谱的问题。

Tech YouTuber ThePrimeagen 在视频中复现了这个场景:Chrome 明确拒绝访问,而命令行工具 curl 却畅通无阻。他称之为"我甚至不知道自己被中间人攻击了"。本文结合他的演示,梳理这次事件的来龙去脉,以及它暴露出的 HTTPS 信任体系的结构性裂缝。

HTTPS 到底在保护什么

要理解这次事故的严重性,得先回到互联网的基础机制。早期互联网走 HTTP,数据全程明文——任何能截获你与服务器之间通信的人,都能直接看到你在输入什么。直到人们开始往网上输送银行密码、个人信息,HTTPS 才成为刚需:它把数据包加密,中间人即使拿到内容,看到的也只是无法解读的乱码。

但加密只解决了一半问题。你的请求并不是"一根线直连服务器",而是要经过多台中间服务器逐跳转发。如果有节点冒充 "google.com",你加密的数据其实是加密给了这个冒充者,它再解密、转发、取回结果——你的密码就落在了它手里。这就是中间人攻击(MITM)。

加密数据包只对目标服务器可见

证书颁发机构:信任的守门人

为了解决"我连的到底是不是真的 google.com",互联网引入了证书颁发机构(CA)。CA 用自己的信誉为你访问的站点背书:确认对方身份后签发证书,你的系统只需信任这批 CA,就能间接信任所有被它们签过名的站点。

系统会无条件信任由受信CA签发的证书

问题在于,全球公开受信任的 CA 公司只有大约 50 到 85 家(ThePrimeagen 引用的是 Google 的说法)。这个数字很小,意味着任何一家的失误,都可能波及整个生态——而这次,踩雷的是印度 CA 机构 eMudra。

NIST P-384 是美国国家标准与技术研究院(NIST)推荐的一种椭圆曲线密码学(ECC)标准,使用 384 位素数域上的椭圆曲线。相比传统的 RSA 算法,ECC 在相同安全强度下密钥更短、计算效率更高,因此被广泛用于 TLS 证书、代码签名等场景。P-384 的私钥理论上应是一个 384 位的随机整数(即 1 到 2^384-1 之间),其随机性直接决定了安全性。如果私钥生成过程存在缺陷——例如随机数生成器失效或熵源不足——就可能产生可预测的私钥,导致证书体系形同虚设。

事故核心:八把私钥,全是"4"

据视频描述,eMudra 在一次密钥签名仪式中生成了一批符合 NIST P-384 规范的椭圆曲线密钥。按设计,私钥应该是极长的大数,结果这八把密钥的私钥竟然全是 47 个字节的零,换算成人们熟悉的形式,差不多就是"4"这样的东西——视频开头那个"你最喜欢的 1 到 2 的 382 次方之间的数字"的玩笑,讽刺的正是这一点。

P-384椭圆曲线密钥本应是超长随机数

能猜到的私钥等于没有私钥。任何人只要掌握这把"4",就能以这些证书的名义冒充任意站点,而依赖这些 CA 的系统会照单全收。

时间线:浏览器反应快,系统信任库反应慢

披露过程相当高效。据视频描述,一位名为 Wayne 的研究者用密钥检查工具扫描证书,在披露库中发现了这八把异常的 EC 密钥;当天傍晚六点前,他已将问题邮件发送给 Apple、Chrome、Microsoft、Mozilla 和 eMudra 本身。Chrome 当天确认并推送了更新,eMudra 同日承认问题,多数浏览器在 24 小时内完成了处置。

真正的问题出在浏览器之外。浏览器更新快,但系统级的信任库——比如 ca-certificates.crt 或 cert.pem——并不会自动同步。curl、git、Python、Perl、Ruby、OpenSSL 等大量工具依赖的正是这份文件。只要这些工具没有检查 eMudra 相关证书的吊销状态,中间人攻击的窗口就一直敞开着。

系统证书库未更新,命令行工具仍信任被撤销的证书

ThePrimeagen 的演示因此极具冲击力:被浏览器拦截的站点,curl 却能正常取回内容。这意味着任何"一键安装脚本"(curl | bash)都有可能在你毫无察觉的情况下拉回被篡改的代码;同理,未更新的 Node 环境执行 npm install,也可能引入恶意包,最终导致 API 密钥泄露,甚至被用于蒸馏攻击而遭封号。

证书吊销是 PKI 体系中的关键机制,用于在证书私钥泄露或误签发后提前废止其有效性。常见方式包括证书吊销列表(CRL)和在线证书状态协议(OCSP)。浏览器通常内置吊销检查或通过更新根证书列表来快速响应,但系统级信任库(如 Linux 的 ca-certificates 包、macOS 的 Keychain)更新频率较低,且许多命令行工具默认不执行实时吊销查询。这种差异导致浏览器已拦截的证书,在 curl 等工具中仍被视为有效,形成安全窗口。

被忽视的深层问题

这起事故最值得警惕的地方,不是某个 CA 出了错——CA 出错在历史上并不罕见——而是修复的不对称性。浏览器厂商有成熟的吊销机制和快速响应流程,而开源工具链和大量嵌入式系统、CI 环境、容器镜像,往往依赖一份长期不动的证书文件。安全公告发出去了,但真正需要更新的人未必知道。

另一层隐忧是滥用痕迹。视频末尾提出了一个无法回避的疑问:一把近乎公开的私钥在长达一年多的时间里存在,很难想象没有被利用过。目前没有公开证据表明存在大规模滥用,但"没有证据"和"没有发生"是两回事,这也正是这次事件让人不安的原因。

现在该做什么

普通用户能做的不多,但开发者可以立刻行动:更新操作系统和 ca-certificates 包,检查 CI 流水线与容器基础镜像中的证书库版本,避免在生产环境中使用未经校验的 curl | bash 安装方式。至于视频里顺带提到的"用搜索引擎 root 智能音箱"——那属于另一个话题了,但同样提醒我们:信任链上任何一个薄弱环节,都可能成为别人的入口。

当整个互联网的加密信任,被一个"4"击穿时,真正需要更新的或许不只是证书文件,还有我们对"默认安全"的假设。

#eMudra证书事故#证书颁发机构#中间人攻击#HTTPS信任链#curl安全#ca-certificates更新#P-384私钥漏洞
分享:

相关推荐