ProxyPin 中文文档 下载 App

ProxyPin Android 抓不到 HTTPS 用户证书限制

问题根源

Android 有两类证书存储:

类型存储位置谁信任
用户证书设置 → 安全 → 证书浏览器等少数应用
系统证书/system/etc/security/cacerts/所有 App(Android 7.0+)

从 Android 7.0(API 24)开始,应用默认只信任系统证书——用户手动安装的证书只对浏览器等豁免了的应用生效。

这就是为什么很多人装了 ProxyPin 证书但大部分 App 仍然抓不到 HTTPS。

解决方案

方案一:Root + 移动到系统证书目录

最彻底的方案,一劳永逸解决所有 App:

  1. ProxyPin 下载根证书到设备
  2. Root 设备(Magisk、SuperSU、或模拟器自带 root)
  3. 用 Root 权限把证书移动到系统目录:
# adb shell 进入设备
su
cp /sdcard/Download/proxypin.crt /system/etc/security/cacerts/
chmod 644 /system/etc/security/cacerts/proxypin.crt

文件名需要符合 hash.0 格式。先算 hash:

openssl x509 -inform PEM -subject_hash_old -in proxypin.crt
# 输出 abcd1234,最终文件名应该是 abcd1234.0
  1. 重启设备

方案二:Flutter App 用 ProxyPin 原生绕过

ProxyPin 内置 Flutter 证书固定绕过,即使没 root 也能抓到 Flutter App 的 HTTPS:

→ 详见 Flutter 绕过证书固定

方案三:给自己的 App 加 network_security_config

如果是自己开发的 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"
    ...>

注意:只在 debug 构建中启用,release 构建会降低安全性。

方案四:模拟器自带 Root

雷电、夜神、MuMu 等模拟器默认带 Root,直接用方案一移动证书到系统目录。

怎么确认问题是证书还是别的

在 Android 设备上:

  1. 打开 Chrome 浏览器 → 访问 HTTPS 网站(如 https://example.com)
  2. 看 Chrome 地址栏有没有锁
  3. Chrome 能正常打开但 ProxyPin 抓不到明文 → 证书没装好
  4. Chrome 也打不开(或警告不安全) → 证书没安装或没信任
  5. Chrome 能打开且 ProxyPin 浏览器请求有明文 → 证书没问题,但 App 有证书固定 → 需要额外绕过