Android 12下Charles抓包非浏览器App HTTPS失败问题求助
解决Android 12非浏览器App无法使用Charles抓取HTTPS流量的问题
核心原因
Android 11及以上版本默认仅信任系统证书目录内的证书,用户手动安装的证书只会被浏览器类应用识别。系统App(如应用商店、YouTube)和目标SDK版本≥24的第三方App会忽略用户证书,导致无法通过Charles代理HTTPS流量。
解决方案
方案一:将Charles证书安装到系统证书目录(需Root/Magisk)
这是覆盖所有App的通用解决方法:
- 导出并转换Charles证书格式
- 打开Charles,依次点击「Help」→「SSL Proxying」→「Save Charles Root Certificate...」,保存为PEM格式文件(比如命名为
charles.pem)。 - 打开Mac终端,执行命令生成证书哈希值:
openssl x509 -inform PEM -subject_hash_old -in charles.pem | head -1 - 把原证书文件重命名为
[哈希值].0(比如哈希值为9a5ba575,就改成9a5ba575.0)。
- 打开Charles,依次点击「Help」→「SSL Proxying」→「Save Charles Root Certificate...」,保存为PEM格式文件(比如命名为
- 推送证书到设备系统目录
- 若设备已Root:连接设备到Mac,执行以下adb命令:
adb shell su -c "mount -o rw,remount /system" adb push 9a5ba575.0 /system/etc/security/cacerts/ adb shell su -c "chmod 644 /system/etc/security/cacerts/9a5ba575.0" - 若用Magisk:在Magisk模块仓库搜索「Move Certificates」并安装,重启设备后,模块会自动将用户安装的Charles证书迁移到系统目录。
- 若设备已Root:连接设备到Mac,执行以下adb命令:
- 重启设备,所有App即可信任Charles证书。
方案二:针对单个App跳过证书校验(无需Root)
如果无法获取Root权限,可针对特定App绕过证书校验:
- 使用Xposed框架模块「JustTrustMe」:安装Xposed后,启用该模块并勾选目标App,它会禁用App的SSL证书校验,让Charles能抓取其HTTPS流量。
- 注意:此方法仅对单个App生效,部分加固过的App可能无法兼容。
方案三:检查基础配置
- 确认Charles的SSL代理设置
- 打开Charles,依次点击「Proxy」→「SSL Proxying Settings」,勾选「Enable SSL Proxying」,并在「Include」列表中添加目标App的域名(或添加
*代理所有域名)。
- 打开Charles,依次点击「Proxy」→「SSL Proxying Settings」,勾选「Enable SSL Proxying」,并在「Include」列表中添加目标App的域名(或添加
- 确认设备代理配置正确
- 设备WiFi代理需设置为Mac的本地IP,端口与Charles代理端口一致(默认8888)。
- 处理Google系应用
- 在Charles的「SSL Proxying Settings」中,勾选「Allow SSL Proxying for Google Services」,规避Google应用的额外证书校验拦截。
内容的提问来源于stack exchange,提问作者Jerry
相关产品推荐
相关产品推荐

