You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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证书导入系统证书目录:

    1. 导出Charles根证书为PEM格式:Help -> SSL Proxying -> Save Charles Root Certificate,选择PEM格式保存;
    2. 计算证书的哈希值:执行openssl x509 -subject_hash_old -in charles.pem | head -1,得到一串8位字符;
    3. 将证书重命名为[哈希值].0(比如9a5ba575.0);
    4. 用adb将证书推送到设备系统目录:adb push [证书文件名] /system/etc/security/cacerts/;
    5. 修改证书权限:adb shell chmod 644 /system/etc/security/cacerts/[证书文件名];
    6. 重启设备,此时证书会被识别为系统信任证书。
  • 绕过应用的证书锁定(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网络安全配置逻辑。

内容的提问来源于stack exchange,提问作者Виталий Агарев

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 00:20:45