如何为Android配置node-http-mitm-proxy证书解决SSL证书未知错误
解决node-http-mitm-proxy Android端HTTPS证书未知错误的方案
问题本质
这个错误完全是因为Android设备不认node-http-mitm-proxy生成的根证书,和Charles的逻辑一样——必须让系统把代理的根证书加入信任列表,才能正常拦截HTTPS流量。
具体操作步骤
1. 找到代理的根证书
node-http-mitm-proxy默认会在你的用户目录下生成证书文件夹:
- macOS/Linux:
~/.http-mitm-proxy - Windows:
C:\Users\[你的用户名]\.http-mitm-proxy
里面的ca.pem就是你要找的根证书。如果启动代理时自定义了证书路径,就去对应的路径找这个文件。
另外,也可以在手机连好代理后,打开浏览器访问http://mitm.it,页面会自动识别Android设备,直接提供证书下载按钮,更省事。
2. 在Android上安装并信任证书
普通非root设备
- 打开系统设置,找「安全」「隐私」这类选项,选「从存储安装证书」。
- 找到传过来的
ca.pem,给证书起个好记的名字(比如“MITM代理根证书”),一定要选「VPN和应用」作为用途——如果选仅WiFi,Chrome或者你的自有应用可能不认。 - 跟着提示完成安装,系统就会信任这个证书签的所有二级证书了。
Android 7.0及以上的特殊处理
从Android 7开始,系统默认不信任用户装的证书,除非应用自己开了权限:
- 如果你是自己开发的应用,在
AndroidManifest.xml的application标签里加一行:<application android:networkSecurityConfig="@xml/network_security_config"> - 然后在
res/xml目录下新建network_security_config.xml,内容写:<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </base-config> </network-security-config>
这样你的应用就会认可用户安装的证书了。
Chrome浏览器的额外设置
就算系统装了证书,Chrome可能还是弹警告,你可以:
- 在地址栏输
chrome://flags/#allow-insecure-localhost,开启「允许不安全的本地主机」(因为代理是桌面本地IP,这个选项刚好适配); - 或者输
chrome://settings/certificates,检查证书有没有出现在「用户」标签页里,确保安装成功。
3. 验证效果
重启代理和手机上的Chrome/自有应用,再访问HTTPS网站,应该不会再弹出私密连接警告,代理的HTTPS_CLIENT_ERROR也会消失。
内容的提问来源于stack exchange,提问作者stoefln
相关产品推荐
相关产品推荐

