在 Linux 上通过 mitmproxy 获取并信任根证书

在使用 mitmproxy 做流量拦截时,客户端会收到代理签发的自签证书。如果系统没有信任这个证书,就会出现如下报错:

Client TLS handshake failed. The client does not trust the proxy's certificate

本文将演示如何在 Linux 系统中通过命令行下载 mitmproxy 根证书,并安装到系统信任库,确保应用能够正常通过代理访问 HTTPS 网站。


1. 背景

当你使用 mitmproxy 作为 HTTP/HTTPS 代理时,它会自动生成一套自签名 CA,用于重新签发服务端证书。但客户端默认并不信任这套 CA,所以所有走代理的 HTTPS 请求都会因为 unknown ca 而失败。

解决办法就是把 mitmproxy 的根 CA 证书下载下来,并导入到系统信任库中。


2. 通过代理下载证书

mitmproxy 自带一个证书分发页面 http://mitm.it/,你可以直接通过代理访问并获取证书。

假设 mitmproxy 运行在 192.168.157.1:8080,执行:

curl -x http://192.168.157.1:8080 http://mitm.it/cert/pem -o mitmproxy-ca-cert.pem

这条命令会通过代理请求 mitm.it,代理会自动返回它自己的根证书,并保存为 mitmproxy-ca-cert.pem


3. 安装证书到系统信任库

下载完成后,将证书复制到系统的 CA anchors 目录,并刷新信任库:

mkdir -p /etc/pki/ca-trust/source/anchors/
cp mitmproxy-ca-cert.pem /etc/pki/ca-trust/source/anchors/mitmproxy.crt
update-ca-trust extract

执行完成后,mitmproxy 的根证书就被系统全局信任了

已有10位网友发表了看法:

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。