HTTPS & eMudhra CA漏洞事件 学习笔记
核心比喻总纲:
CA(证书机构 eMudhra)= 互联网公证处
CA私钥 = 公证处的公章(印章本体)【本次出事的东西】
CA公钥 = 全世界人手一份的验章放大镜(公开,用来核对章印真假)
证书上的CA签名 = 公章盖出来留在纸上的红色印子
网站公私钥(如OpenAI的一对密钥)= 网站自己的钥匙,和公证处公章是两套独立东西
一、基础概念:两套完全分开的公私钥(重中之重,极易混淆)
第1套:网站自己的公私钥(以OpenAI举例)
- OpenAI自己先生成一对密钥:
- OpenAI私钥:锁在OpenAI服务器内部,绝不对外发送。
- OpenAI公钥:可以公开,最后写到证书里面。
- 作用:TLS握手的时候,用来和浏览器协商出临时的会话密钥,搭建HTTPS加密隧道,传输数据加密。
- OpenAI拿着【自己的公钥 + 自己的域名openai.com】打包,去找CA公证处,申请盖章。
✅ 重点:CA看不到、也不会给OpenAI的私钥盖章,只给「域名+网站公钥」这包信息盖章。盖章之后,就相当于公证处担保:这个公钥,确实属于openai.com。
第2套:CA公证处自己的公私钥(eMudhra这一组,出事的这一组)
- CA私钥(公章本体):绝密!只有CA本来应该持有。用它才能生成合法的签名(印子)。本次漏洞就是这个公章被黑客复刻出来了。
- CA公钥(验章工具):公开!提前内置在浏览器、手机、系统、Linux证书包里,所有人都有。作用:拿到证书之后,校验证书上的印子是不是真公章盖出来的。
证书是什么?
证书就是一张公证处盖完章的“担保纸”,里面包含:
域名(openai.com)、网站的公钥、证书有效期、序列号、CA私钥生成的签名(红色印子)。
你访问网站的时候,网站把这张证书发给你的浏览器。
浏览器校验证书的流程
- 浏览器拿出内置的CA公钥(验章放大镜),核对证书上的印子。
- 印子校验通过 → 浏览器信任这个绑定关系:这个公钥属于这个域名。
- 然后使用证书里网站的公钥,协商加密隧道,HTTPS小锁亮起。
二、本次eMudhra事故到底发生了什么?
正常的CA公章(CA私钥),应该是随机性极强的超大数字,几乎不可能试出来。
这家印度公司eMudhra在生成这组CA私钥的时候犯了低级错误:有效熵只有1字节(8bit),总共只有 0~255,合计256种可能性。
相当于:公证处刻公章的时候,印章纹路一共就只有256种款式,非常容易挨个试出原版印章。
👉 黑客怎么试、怎么确认猜对了公章(CA私钥)?
不需要浏览器、不需要联网、不需要访问任何网站,纯本地数学计算!
- 黑客先在网上随便下载一张eMudhra之前签发的、合法公开的原版证书(样板文件,自带原版印子)。
- 写程序循环遍历0~255,把每一个数字当做候选的CA私钥:
- 使用这个候选私钥,对样板证书的原文,重新计算一遍签名(盖一个新印子)
- 和样板证书上原本的印子对比,看是否一模一样
- 一旦两个印子完全匹配 → Bingo!这个数字就是真正的CA私钥,黑客成功复刻出一模一样的公章。
不是拿假证书去浏览器里测试猜密钥!
【猜密钥】是离线本地比对样板;
【拿假证书去浏览器测试】是拿到公章之后,黑客额外做的验证动作。
拿到复刻公章之后,黑客就拥有了和eMudhra一模一样的盖章能力:
黑客可以自己随便打包:任意域名(openai.com/chatgpt.com)+ 黑客自己生成的公钥,再用复刻的公章盖章,产出一张浏览器会认为合法的假证书。
三、中间人攻击:劫持是怎么发生的?(不用你点击任何链接!)
⚠️ 关键:劫持不是骗你去点恶意链接,是在你的数据包出门的必经路上动手脚。你正常输入网址、正常上网,流量半路就被截走。
有两种最常见方式:
-
ARP劫持(公共WiFi最典型,咖啡馆WiFi)
坏人连同一个WiFi,发送伪造广播,欺骗你电脑:“我才是路由器网关,所有数据包都发给我!”
你的电脑被骗,所有上网包第一站先发给坏人电脑,坏人变成流量中转站。 -
DNS劫持(路由器被篡改)
路由器里的DNS服务器地址被改成坏人的服务器。
你问DNS:openai.com的IP是多少,坏人DNS不返回真实服务器IP,返回坏人自己机器的IP。
你的浏览器地址栏依然写openai.com,但是网络包直接连到坏人服务器。
完整攻击链路(劫持 + 坏公章,两个条件缺一不可)
- 你正常输入 openai.com,没有点任何奇怪链接;
- 流量被坏人劫持,落到坏人机器手里;
- 坏人拿出复刻的CA公章,制作一张域名写openai.com的假证书,发给你的浏览器;
- 如果你的系统/浏览器信任这个CA,验章通过,HTTPS小锁正常亮起,浏览器不报警;
- 坏人一边和你建立加密隧道,一边自己去连接真正的OpenAI;
- 坏人作为中转站,解密你的流量,偷看、甚至篡改你的消息,再转发给OpenAI。
👉 后果:你的API Key、对话内容、账号密码都会被偷走,坏人可以拿着API密钥自己调用接口刷账单。
如果只有劫持、没有这个坏掉的CA公章:坏人就算截住流量,造不出浏览器认可的证书,浏览器直接大红警告,攻击失败。
四、出事之后怎么补救?难点在哪?
✅ 正确的补救思路:不是让eMudhra删掉自己原来的私钥(没用!黑客已经复制走公章了)
真正有效的方案:通知全世界所有设备:这个公章作废,以后凡是这个章盖出来的证书,一律不认(拉黑吊销这个CA)
Chrome、Firefox、苹果、微软已经紧急在浏览器、系统层面拉黑了这个CA。
❌ 最大麻烦:长尾风险
大量老旧Linux服务器、物联网设备、摄像头、工控机,它们的信任列表跟着系统自带的ca-certificates证书包走,不会自动更新黑名单。
只要没人手动更新证书包,这些老设备一辈子都会信任这个作废的公章。只要它处在被劫持的网络环境,就有被中间人攻击的风险。这类设备很多早已停止维护,风险会持续非常久。
五、补充:CA盖章服务收费吗?
- 网站向CA申请证书(找公证处盖章):有免费(Let’s Encrypt),也有付费证书(企业OV/EV证书);
- 想要成为全球可信的根CA(拿到公证处入场资格,放进各大厂商信任列表):成本很高,需要严格安全审计、合规审核,资质本身价值很高;CA后续靠给网站签发证书盈利。
六、高频误区汇总(划重点)
- ❌ 误区:猜的是OpenAI网站的私钥
✅ 正解:猜的是CA公证处自己的私钥(公章),和网站密钥无关。 - ❌ 误区:劫持需要我主动点开坏人链接
✅ 正解:劫持是网络底层路由欺骗,正常上网就有可能中招,公共WiFi风险最高。 - ❌ 误区:证书里存放CA私钥
✅ 正解:证书里只有盖好的签名印子,CA私钥(公章本体)永远不跟着证书传输。 - ❌ 误区:CA会保存网站的私钥
✅ 正解:CA只给网站【公钥+域名】盖章,从来碰不到网站私钥。 - ❌ 误区:全网HTTPS直接全部失效
✅ 正解:只有还没拉黑这个CA的设备,在流量被劫持时才会中招;新版主流浏览器已经拉黑,普通人日常上网风险很低。

浙公网安备 33010602011771号