mitmproxy抓取安卓应用流量时SSL证书校验失败如何绕过?
解决方案
1. 修复系统根证书信任
安卓7.0及以上版本默认禁止第三方应用信任用户自行安装的CA证书,这是浏览器流量正常、应用报SSL错误的核心原因,需要将mitmproxy证书导入系统根证书目录:
- 导出mitmproxy默认CA证书,默认路径为
~/.mitmproxy/mitmproxy-ca-cert.pem - 执行命令生成安卓系统认可的证书文件名:
openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.pem | head -1 - 将证书重命名为上述命令输出的哈希值加
.0后缀,例如输出为c8750f0d则文件名为c8750f0d.0 - 将重命名后的证书存入安卓设备
/system/etc/security/cacerts/目录,权限设置为644。如果设备已安装Magisk,可直接使用系统证书导入模块完成操作,无需修改系统分区。
2. 绕过SSL Pinning校验
亚马逊等应用内置了证书锁定逻辑,不会信任系统根目录下的自定义CA,需根据设备情况选择对应方案:
- Root设备方案:安装LSPosed框架,启用「TrustMeAlready」或「通用SSL Unpinning」模块,选择需要抓包的应用开启规则即可绕过绝大多数应用的证书锁定。
- 非Root设备方案:使用Frida动态注入工具,安卓端运行对应架构的frida-server,PC端安装frida-tools后调用公开的通用SSL Unpinning脚本,启动应用时注入即可生效,参考命令:
frida -U -f 目标应用包名 -l ssl_unpin.js --no-pause - 加固应用方案:对上述方案无效的加固应用,可反编译APK删除内置的证书锁定逻辑、替换应用内置信任证书为mitmproxy证书后,重新签名安装即可。
3. mitmproxy侧配置优化
--ssl-insecure参数仅作用于mitmproxy与上游服务的SSL握手,不会解决应用端的证书校验问题,可添加以下参数优化兼容性:
- 添加
--set client_certs=None参数,避免mitmproxy向应用请求客户端证书减少握手失败 - 若存在UDP/QUIC流量漏抓,可添加
--quic参数开启mitmproxy的QUIC支持,或在安卓设备端禁用QUIC协议。
内容的提问来源于stack exchange,提问作者Sawan Garg
相关产品推荐
相关产品推荐

