httpCanary 中文文档 下载 App

Android 7+ 系统证书:绕过网络安全限制

问题背景

Android 7.0(API Level 24)引入了 网络安全配置(Network Security Config) 机制。从这个版本开始:

这意味着即使你已经按上一页的步骤正确安装了 httpCanary 的 CA 证书,在某些应用里 HTTPS 仍然抓不到。

解决方案总览

方案是否需要 Root难度覆盖范围
导出证书 + 应用内 network_security_config否中仅限自己开发的 App
将证书安装为系统证书是高所有应用
模拟器安装系统证书否低模拟器内所有应用
VirtualApp 平行空间否中平行空间内的应用

方案一:network_security_config(自己开发的 App)

如果你抓的是自己写的 App,在项目中添加网络安全配置即可:

<!-- res/xml/network_security_config.xml -->
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" />
        </trust-anchors>
    </base-config>
</network-security-config>

然后在 AndroidManifest.xml 的 <application> 标签中引用:

android:networkSecurityConfig="@xml/network_security_config"

这样 App 就会同时信任系统证书和用户证书,httpCanary 的 CA 证书就能被正常识别。

方案二:系统证书(需要 Root)

如果设备已 Root,可以把证书复制到系统证书目录,让 Android 把它当作预装证书来信任:

  1. 在 httpCanary 设置中导出根证书(PEM 格式)
  2. 把证书文件重命名为系统证书格式:<hash>.0,hash 值可以用 openssl 计算
  3. 通过 Root 管理器把文件复制到 /system/etc/security/cacerts/
  4. 设置文件权限为 644
  5. 重启设备

具体的 hash 计算和命令可以参考网络上的详细教程,不同手机 ROM 可能略有差异。

方案三:模拟器(最省心)

在 Android 模拟器中,网络安全限制可以轻松绕过:

  1. 在模拟器设置中开启 Writable System Image
  2. 用 adb 把证书 push 到系统目录:adb push HttpCanary.pem /system/etc/security/cacerts/
  3. 重启模拟器

这是很多开发者的首选方案——不用 Root,随时重置,而且模拟器环境干净不污染真机。

方案四:VirtualApp 平行空间

VirtualApp 是一个免 Root 的 App 虚拟化框架,它会在自己的环境内独立管理证书。把目标 App 安装到 VirtualApp 中,再配合 httpCanary 抓包,可以绕过宿主系统的网络安全限制。

缺点是兼容性有限——某些使用特殊机制的 App(比如微信支付、银行 App)可能无法在 VirtualApp 中正常运行。

与 SSL Pinning 的区别

Android 7+ 的网络安全限制是 系统级 的,而 SSL Pinning(证书固定)是 应用级 的另一个机制——应用在代码里硬编码了服务器证书指纹,和系统/用户信任链都无关。如果应用开启了 SSL Pinning,就算把 httpCanary 的证书装成系统证书也没用,需要用 JustTrustMe 等 Xposed 模块来 Hook 绕过。详见 SSL Pinning 绕过。