Proxyman 26.3.0 阻止使用已泄露 eMudhra 证书的服务器

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 中间证书的私钥生成有误。任何人都可以从公开证书中恢复这些私钥。

2026 年 10 月 20 日发布的 eMudhra 中间 CA 泄露事件页面
2026 年 10 月 20 日发布的 eMudhra 中间 CA 泄露事件页面

攻击者只要掌握其中一个私钥,就能为任何网站伪造证书,例如你的银行或公司的 API。仍信任 eMudhra 的应用都会将其视为真实证书而予以接受。

响应非常迅速:

  • Chrome 和 Firefox 已拦截这 8 个证书。Microsoft 和 Apple 几天后跟进。
  • eMudhra 吊销了这些证书,Sectigo 也吊销了由其签发的副本。

因此,如果你使用的是最新版浏览器或操作系统,就已受到保护。但还存在一个漏洞:代理。

2. 为何经过 Proxyman 的流量仍受影响

Proxyman 位于你的应用与服务器之间。为了显示 HTTPS 流量,它会建立两条连接:

  1. 你的应用 → Proxyman: 你的应用看到的是 Proxyman 生成的证书,由你安装并信任的 Proxyman CA 签名。
  2. 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. 自行测试

该研究人员运行着使用泄露证书的测试服务器。你可以借助其中一台检查自己的设置:

  1. 从下载页面更新到 Proxyman 26.3.0,或者通过 Proxyman → Check for Updates… 进行更新。
  2. 为 dv-g3b-emudhra.we-have-a-problem.com 开启 SSL Proxying。
  3. 通过 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 或关闭其系统代理。

延伸阅读

Noah Tran
Noah Tran

升级到 Proxyman 26.3.0

今天即可在 macOS 上获取 eMudhra 修复。Windows 和 Linux 版本将于本周获得相同修复。

下载 macOS 版 Proxyman