0

我有几台不支持 TLS 1.1 和 1.2 的机器,它们应该连接的服务器正在放弃对旧协议的支持。无论如何,它们都在通过中央服务器进行隧道传输。

这个想法是在中央服务器上运行 mitmdump 作为反向代理;客户端将纯 http 请求发送到反向代理而不是 https 到远程服务器,然后它通过 TLS 1.2 与远程服务器通信(如果您认为有更好/更简单的解决方案,请告知)。

我在本地对此进行测试,因此客户端将 http 发送到运行 mitmdump 的本地主机。

这就是我运行 mitmdump 的方式:

mitmdump -R https://remotehost:port --port 8844 --upstream-trusted-ca "C:\fullpath\root_ca_pem.cer"

这就是我得到的:

127.0.0.1:54547: clientconnect
127.0.0.1:54547: POST https://remotehost:someport/ 
<< Certificate Verification Error for remotehost: unable to get issuer certificate (errno: 2, depth: 1)
127.0.0.1:54547: clientdisconnect

远程服务器使用默认情况下不在受信任的根证书存储中的 CA 证书和子证书,尽管我确实在那里添加了它们(它是否被 Windows 上的 mitmdump 使用?)。所以我使用了“--upstream-trusted-ca”,但不幸的是这并没有解决问题。

任何想法我做错了什么?也许我应该在链中包含所有证书;我该怎么做?

4

1 回答 1

1

远程服务器使用默认情况下不在受信任的根证书存储中的 CA 证书和子证书,尽管我确实在那里添加了它们(它是否被 Windows 上的 mitmdump 使用?)。

我们想使用 OS 商店,但使用 OpenSSL 不容易做到这一点。Mitmproxy现在使用certifi 。正如您所提到的,--upstream-trusted-ca这是解决此问题的正确方法。如果您有不是由服务器发送的中间 CA,您可能需要像这样构造您的 PEM 文件:

-----BEGIN CERTIFICATE-----
<cert>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<intermediary cert (optional)>
-----END CERTIFICATE-----
于 2016-11-24T11:39:23.897 回答