HTTPS证书私钥居然只有“4”?印度“草台班子”CA机构搞出史诗级乌龙,全网连夜“擦屁股”

想象一下,你花重金买了一个顶级保险箱,用来存放公司最核心的机密。结果某天你发现,这保险箱的出厂密码居然是“0004”,而且全世界任何人都能一秒钟拧开它。

这听起来像段子,但这两天,全球互联网的安全圈真就上演了这么一出荒诞剧。

盖公章的印泥,密码是个位数

事情的主角是一家名为 eMudhra 的印度证书颁发机构(CA)。

简单科普一下,CA 就是互联网上的“公安局”,负责给各大网站发放 HTTPS 证书(也就是你浏览器地址栏里的那把小锁)。有了这个证书,你和网站之间的通信才是加密的,别人偷窥不了。

而 CA 自己的“私钥”,就是盖公章的印泥。谁拿到了私钥,谁就能给任何网站(比如 google.com 或你的网银)伪造一张绝对合法的证书,从而堂而皇之地进行中间人攻击,解密你的所有流量。

结果,安全研究员 Wayne 在扫描公开数据时,差点把下巴惊掉:eMudhra 搞出来的 8 个中间证书,其私钥弱到了令人发指的地步。

正常来说,这种基于 P-384 椭圆曲线的私钥,应该是一个长达 116 位的超大数字,可能性多到宇宙毁灭都穷举不完。但 eMudhra 的这几个私钥,数值分别是:4、56、66、115、155、156、230、237。

没错,最大的才 237。这意味着,黑客甚至不需要写什么高深的破解脚本,随便写个 for i in range(256) 的循环,一秒钟就能把私钥算出来。

为了证明这不是开玩笑,另一位研究员 Flüpke 直接把那个值为“4”的私钥扔到了 GitHub 上。BleepingComputer 的记者拿去一验,还真对上了。

“这怎么可能发生?”

面对全网的围观,eMudhra 赶紧出来滑跪,表示这是 2025 年 4 月生成证书时“脚本里的一个 Bug”。大概是脚本在生成密钥时出了岔子,搞出了一批“残次品”,结果因为标签长得太像,被糊涂的工程师直接拿去签发了正式证书。

eMudhra 辩解说,这些证书大部分没在生产环境用过,也没发现被黑客利用。

但安全圈的大佬们根本不信这套说辞。Go 语言的密码学维护者 Filippo Valsorda 直接开喷:“这简直属于‘这怎么可能发生’的范畴。难道他们调用密钥生成接口时,把 size 参数手滑填成了 1 ???”

BGP.tools 的总监也吐槽:“我猜这可能是意外泄露到生产环境的示例代码。但这么离谱的事居然没人注意到,简直疯了。”

比“心血漏洞”更让人头疼的长尾噩梦

虽然目前还没发现野外利用,但谁也不敢赌黑客是不是早就偷偷拿着这些私钥在搞事。于是,一场全网的紧急封堵开始了。

Mozilla 反应最快,10 月 17 日直接通过 Firefox 的 OneCRL 系统全网拉黑,用户连浏览器都不用重启就安全了。谷歌Chrome 和苹果也紧随其后,在系统层面把这 8 个中间证书扔进了黑名单。

HTTPS证书私钥居然只有“4”?印度“草台班子”CA机构搞出史诗级乌龙,全网连夜“擦屁股”插图

但浏览器好办,真正的噩梦在“水面之下”。

Valsorda 警告说,这次的清理工作比当年的“心血漏洞(Heartbleed)”还要让人头疼。

为什么?因为浏览器会自动更新证书库,但互联网的水下部分——那些跑在服务器上的 Python 脚本、Go 语言写的微服务、Docker 容器里的旧镜像、各种 CLI 工具,甚至是你家角落里吃灰的物联网设备,它们都自带了一份静态的 CA 证书库。

现在,Ubuntu、Debian、Alpine 等各大 Linux 发行版,以及 Python (certifi)、Go、Node.js、Rust 等语言生态,都在疯狂加班推送 ca-certificates 的更新。如果你是个运维,这两天你的工作群大概率会被“赶紧更新证书库”的消息刷屏。

HTTPS证书私钥居然只有“4”?印度“草台班子”CA机构搞出史诗级乌龙,全网连夜“擦屁股”插图1

对普通人有什么影响?

对于普通上网冲浪的人来说,只要你用的是最新版的 Chrome、Firefox 或 Safari,基本不用慌,大厂已经帮你把门焊死了。(不过有人发现 Windows 10 上的 Edge 似乎还有点漏网之鱼,微软表示“在查了”)。Signal、WhatsApp 这种不依赖传统 TLS 证书的应用,也不受影响。

但如果你经常连公共 WiFi,或者处于某些网络环境复杂的地方,风险依然存在。因为攻击者只要拿到那个值为“4”的私钥,就能伪造一个完美的 HTTPS 证书,在你毫无察觉的情况下,把你和银行、邮箱之间的加密流量扒得底朝天。

互联网就是个巨大的草台班子

这次事件,再次无情地揭露了互联网安全体系的一个残酷真相:整个 HTTPS 信任链的强度,完全取决于里面最草台班子的那一环。

一个 CA 机构的实习生(或者一个写错参数的脚本),就能让全球的安全工程师跟着熬几个大夜。

目前,eMudhra 已经吊销了这 8 个证书,并停止了相关根证书的签发。但那些散落在全球各个角落、尚未更新的旧系统和旧容器,依然像是一颗颗定时炸弹。

所以,各位开发和运维朋友,别愣着了,赶紧去检查一下你们服务器和容器里的证书库更新了吗。毕竟,在这个魔幻的互联网里,你永远不知道下一个把保险箱密码设成“4”的,会是谁。