具有自签名上游证书的反向代理模式下的 Mitmproxy

Mitmproxy in reverse proxy mode with self signed upstream cert

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

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

我在本地测试这个,所以客户端将 http 发送到本地主机,其中 mitmdump 运行ning.

我就是这样 运行 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 证书和子证书,尽管我确实在那里添加了它们(它被 mitmdump 在 windows 上使用了吗?)。所以我使用了“--upstream-trusted-ca”,但不幸的是这并没有解决问题。

知道我做错了什么吗?也许我应该将所有证书都包含在链中;我该怎么做?

The remote server uses CA cert and sub cert which are not in trusted root certificate store by default, though I did add them there (is it used by mitmdump on windows?).

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

-----BEGIN CERTIFICATE-----
<cert>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<intermediary cert (optional)>
-----END CERTIFICATE-----