Charles-proxy在Android 12上无法解密应用流量的问题求助
解决Charles拦截Android应用流量时的SSL handshake失败问题
针对你遇到的「SSL handshake with client failed: An unknown issue occurred processing the certificate (certificate_unknown)」错误,以下是经过验证的解决方法:
确认证书安装位置(Android 7+关键)
Android 7及以上系统默认仅信任系统级证书,用户安装的证书不会被应用认可。需要将Charles证书导入系统证书目录:- 导出Charles根证书为PEM格式:
Help -> SSL Proxying -> Save Charles Root Certificate,选择PEM格式保存; - 计算证书的哈希值:执行
openssl x509 -subject_hash_old -in charles.pem | head -1,得到一串8位字符; - 将证书重命名为
[哈希值].0(比如9a5ba575.0); - 用adb将证书推送到设备系统目录:
adb push [证书文件名] /system/etc/security/cacerts/; - 修改证书权限:
adb shell chmod 644 /system/etc/security/cacerts/[证书文件名]; - 重启设备,此时证书会被识别为系统信任证书。
- 导出Charles根证书为PEM格式:
绕过应用的证书锁定(Certificate Pinning)
很多应用会通过证书锁定机制拒绝非预设的CA证书,导致Charles无法解密流量:- 若设备已root,使用Xposed模块(如JustTrustMe)一键绕过证书验证;
- 使用Frida脚本hook验证逻辑:编写简单脚本信任所有证书,运行命令
frida -U -f com.your.target.app -l bypass-pinning.js; - 若为自研应用,直接修改代码移除证书锁定相关逻辑。
检查Charles SSL代理配置
- 确保目标主机的SSL代理规则已正确添加,无域名拼写、端口错误;
- 临时开启「Enable SSL Proxying for all hosts」测试,排除单个主机配置问题;
- 确认Charles的代理端口未被防火墙或其他工具占用。
重新验证证书完整性
- 重新导出Charles根证书,避免导出过程中文件损坏;
- 在设备上重新安装证书,确认系统显示证书状态为「已信任」;
- 检查设备代理设置是否正确指向Charles所在机器的IP和端口,测试网络连通性(比如访问http://charlesproxy.com/getssl确认代理生效)。
处理Android 11+的网络安全配置限制
Android 11+部分应用会通过network_security_config.xml限制信任CA:- 反编译APK,修改
res/xml/network_security_config.xml,添加<trust-anchors><certificates src="system" /><certificates src="user" /></trust-anchors>; - 若无法修改APK,尝试用adb清除应用缓存:
adb shell pm clear com.your.target.app,或使用Frida hook网络安全配置逻辑。
- 反编译APK,修改
内容的提问来源于stack exchange,提问作者Виталий Агарев
相关产品推荐
相关产品推荐

