Proxyman 26.3.0 阻止使用已泄露 eMudhra 证书的服务器
阅读约 4 分钟
适用于 macOS 的 Proxyman 26.3.0 现已拦截使用已泄露 eMudhra 证书的服务器 🔒
上周,8 个 eMudhra 中间证书的私钥泄露。浏览器和操作系统在几天内便不再信任这些证书。但通过 Proxyman 发送流量的应用直到现在才获得这一保护。
本文涵盖以下内容:
- eMudhra 事件的经过。
- 为何经过 Proxyman 的流量仍会受到影响。
- Proxyman 26.3.0 如何修复此问题。
- 如何自行测试此修复。
修复已包含在 适用于 macOS 的 Proxyman 26.3.0 中。Windows 和 Linux 版 Proxyman 将于本周获得相同的修复。
1. 发生了什么?
eMudhra 是一家证书颁发机构(CA)。CA 负责签发用于证明网站真实性的证书。浏览器之所以信任某个网站,是因为受信任的 CA 为其证书签了名。
2026 年 10 月 20 日,一位安全研究人员发布了报告,指出 8 个 eMudhra 中间证书的私钥生成有误。任何人都可以从公开证书中恢复这些私钥。

攻击者只要掌握其中一个私钥,就能为任何网站伪造证书,例如你的银行或公司的 API。仍信任 eMudhra 的应用都会将其视为真实证书而予以接受。
响应非常迅速:
- Chrome 和 Firefox 已拦截这 8 个证书。Microsoft 和 Apple 几天后跟进。
- eMudhra 吊销了这些证书,Sectigo 也吊销了由其签发的副本。
因此,如果你使用的是最新版浏览器或操作系统,就已受到保护。但还存在一个漏洞:代理。
2. 为何经过 Proxyman 的流量仍受影响
Proxyman 位于你的应用与服务器之间。为了显示 HTTPS 流量,它会建立两条连接:
- 你的应用 → Proxyman: 你的应用看到的是 Proxyman 生成的证书,由你安装并信任的 Proxyman CA 签名。
- Proxyman → 服务器: Proxyman 接收服务器的真实证书。
在第二条连接上,Proxyman 会接受任何证书。这是有意为之:调试本地或测试环境服务器时,经常会用到自签名证书,Proxyman 不应妨碍你的工作。
问题在于:你的应用从未看到服务器的真实证书,它只看到 Proxyman 的证书。因此,即便 Apple、Google 和 Microsoft 已经拦截了 eMudhra 证书,经过 Proxyman 发往使用这些证书的服务器的请求仍然能够成功。
一个团队在 issue #2797 中报告了此问题。他们公司已针对泄露的证书部署了防护措施。如果有人开启了 Proxyman 却忘记关闭,就会在不知情的情况下绕过这些防护。感谢你的反馈,并清楚地说明了风险 🙏
3. Proxyman 26.3.0 如何修复此问题
我们首先检查了 Proxyman 所用的 TLS 库(SwiftNIO SSL)是否已有修复。结果没有。而且即便更新该库也无济于事,因为 Proxyman 是有意跳过证书检查的。因此,我们在自己这一侧完成了修复。
Proxyman 26.3.0 内置了 8 个已泄露 eMudhra 证书的拦截列表,包括由 Sectigo 签发的副本。通过 SSL Proxying 解密 HTTPS 或 WebSocket(WSS)流量时,Proxyman 会检查每个服务器的证书链:
- 如果证书链中有证书使用了某个泄露的密钥,Proxyman 会关闭该连接。
- 如果服务器只发送了自己的证书,Proxyman 会检查该证书的签发者。如果其签名使用了某个泄露的密钥,Proxyman 同样会关闭该连接。
- 对于其他服务器,行为保持不变。
| 服务器证书 | 26.3.0 之前 | Proxyman 26.3.0 |
|---|---|---|
| 使用已泄露的 eMudhra 证书 | 可连接 | 已拦截 |
| 普通证书,例如 github.com | 可连接 | 可连接 |
| 自签名证书,例如本地服务器 | 可连接 | 可连接 |
该检查仅在 Proxyman 连接服务器时执行一次,速度非常快。
当 Proxyman 拦截某个服务器时,你的应用会收到一个 502 Bad Gateway 响应,其中说明了原因。你将在下一步中看到它。
4. 自行测试
该研究人员运行着使用泄露证书的测试服务器。你可以借助其中一台检查自己的设置:
- 从下载页面更新到 Proxyman 26.3.0,或者通过 Proxyman → Check for Updates… 进行更新。
- 为
dv-g3b-emudhra.we-have-a-problem.com开启 SSL Proxying。 - 通过 Proxyman 发送一个请求。Proxyman 默认运行在 9090 端口:
curl --proxy http://localhost:9090 https://dv-g3b-emudhra.we-have-a-problem.com/
你将看到:
Bad Gateway: Blocked dv-g3b-emudhra.we-have-a-problem.com:443 because its certificate chain uses a compromised eMudhra CA key
对 https://github.com/ 运行同样的命令,它将照常工作。
如果某个域名未开启 SSL Proxying,Proxyman 不会解密流量。它会直接转发加密连接,由你的应用自行检查证书,就像没有 Proxyman 一样。
5. 须知
- Windows 和 Linux: Proxyman 的 Windows 和 Linux 版本将于本周获得相同的修复。
- 自签名证书仍然可用。 Proxyman 只拦截已泄露的 eMudhra 证书。你的本地和测试环境服务器将照常工作。
- Proxyman 是一款调试工具。 它无法取代公司的安全检查。调试结束后,请退出 Proxyman 或关闭其系统代理。
延伸阅读

