如何配置mitmproxy拦截HTTPS?相关配置疑问咨询
关于mitmproxy调试HTTPS请求的问题解答
1. 是否需要为mitmproxy配置另一端口监听HTTPS?
完全不需要!mitmproxy默认使用单个端口就能同时处理HTTP和HTTPS流量。它的工作逻辑是:当客户端发起HTTPS请求时,会先发送一个CONNECT请求到mitmproxy的监听端口,mitmproxy会和客户端完成SSL握手,之后再作为代理和目标服务器建立连接。你遇到HTTPS请求失败的问题,大概率不是端口配置的问题,核心原因应该是客户端/HTTP工具没有信任mitmproxy的CA证书。
2. 如何让HTTP工具信任mitmproxy的CA证书?
mitmproxy在首次启动时,会自动生成根CA证书,默认存储在~/.mitmproxy/目录下(Windows系统是C:\Users\<你的用户名>\.mitmproxy\),关键文件是mitmproxy-ca.pem(PEM格式)和mitmproxy-ca-cert.p12(PKCS12格式,用于Windows/macOS系统导入)。下面分场景说明信任方法:
浏览器(Chrome/Firefox/Edge)
- Chrome/Edge:
- 打开设置 → 隐私和安全 → 安全 → 管理证书
- 切换到「受信任的根证书颁发机构」标签页
- 点击「导入」,选择
~/.mitmproxy/mitmproxy-ca-cert.p12文件,导入过程中无需输入密码,一路确认即可
- Firefox:
- 打开设置 → 隐私与安全 → 证书 → 查看证书
- 切换到「证书机构」标签页,点击「导入」
- 选择
~/.mitmproxy/mitmproxy-ca.pem文件,勾选「信任由此证书颁发机构标识的网站」,确认保存
命令行工具(curl、wget、HTTPie)
- curl:每次请求时指定CA证书路径:
或者设置环境变量永久生效:curl --cacert ~/.mitmproxy/mitmproxy-ca.pem https://example.comexport REQUESTS_CA_BUNDLE=~/.mitmproxy/mitmproxy-ca.pem export CURL_CA_BUNDLE=~/.mitmproxy/mitmproxy-ca.pem - wget:
wget --ca-certificate=~/.mitmproxy/mitmproxy-ca.pem https://example.com
Python 代码(requests库)
- 方法1:在请求中指定CA证书:
import requests url = "https://example.com" proxies = {"http": "http://127.0.0.1:8080", "https": "http://127.0.0.1:8080"} response = requests.get(url, proxies=proxies, verify="~/.mitmproxy/mitmproxy-ca.pem") - 方法2:设置环境变量(和命令行的环境变量一致),这样所有requests请求都会自动使用该CA证书
Java 应用
需要将mitmproxy的CA证书导入到Java的信任存储中:
keytool -import -alias mitmproxy -file ~/.mitmproxy/mitmproxy-ca.pem -keystore $JAVA_HOME/jre/lib/security/cacerts
默认密钥库密码是changeit,执行后按提示确认导入即可。
内容的提问来源于stack exchange,提问作者blueFast
相关产品推荐
相关产品推荐

