ProxyPin HTTPS 根证书安装与全平台信任指南
为什么需要根证书
HTTPS 流量使用 TLS 加密传输,ProxyPin 要解密查看明文内容,需要作为中间人(MITM)拦截 TLS 连接。这就要求系统信任 ProxyPin 动态生成的自签名根证书——只有这样,浏览器和 App 才会认为 ProxyPin 生成的证书是合法的。
默认状态:ProxyPin 启动后只能抓 HTTP。开启 HTTPS 代理 + 安装根证书后才能解密 HTTPS。
桌面端(Windows / macOS / Linux)
Windows
- 打开 ProxyPin 桌面端,在顶部菜单栏点击「证书」→「安装证书」
- 选择「系统」作用域(推荐),这样所有用户和应用都信任该证书
- 按证书导入向导完成安装
- 安装完成后,打开「浏览器」→ 「Internet 选项」→ 「内容」→ 「证书」→ 「受信任的根证书颁发机构」,确认 ProxyPin CA 已在列表中
如果只想让当前用户信任,可选择「当前用户」作用域。
macOS
- 打开 ProxyPin,点击「证书」→「安装证书」
- 系统钥匙串访问会自动打开
- 将 ProxyPin 的根证书拖入「系统」钥匙串
- 双击该证书 → 展开「信任」部分 → 将「始终信任」设为「使用该证书时」
- 关闭窗口时输入系统密码确认
Linux
Linux 发行版众多,证书安装方式各不相同。ProxyPin 提供导出证书功能,手动安装步骤:
- 在 ProxyPin 中导出根证书(CRT 或 PEM 格式)
- Debian/Ubuntu:将证书复制到
/usr/local/share/ca-certificates/后执行sudo update-ca-certificates - CentOS/RHEL:复制到
/etc/pki/ca-trust/source/anchors/后执行sudo update-ca-trust
移动端(Android / iOS)
Android 用户证书 vs 系统证书
Android 有两类证书存储位置:
| 类型 | 位置 | 信任范围 | 适用版本 |
|---|---|---|---|
| 用户证书 | 设置 → 安全 → 证书 | 仅部分 App | Android 7.0- |
| 系统证书 | /system/etc/security/cacerts/ | 所有 App | 所有版本 |
Android 7.0+ 的 App 默认不信任用户证书。解决方案二选一:
方案 A:Root + 移动到系统目录
- ProxyPin 下载根证书(.crt 格式)
- 用 Root 权限将证书移动到
/system/etc/security/cacerts/ - 修改权限为 644
- 重启设备
方案 B:App 配置 network_security_config
在目标 App 的 AndroidManifest.xml 中配置允许用户证书。这需要对 App 有开发权限,适合自己开发的应用。
iOS 信任步骤(关键!)
iOS 必须分两步:先安装描述文件 → 再手动信任根证书。
第一步:安装配置描述文件
- 打开 ProxyPin,按提示安装 VPN 配置描述文件
- 系统「设置」→「通用」→「VPN 与设备管理」中能看到已安装的 ProxyPin 配置
第二步:手动信任根证书(经常被遗漏!)
- iOS「设置」→「通用」→「关于本机」
- 滚到最底部 → 「证书信任设置」
- 找到 ProxyPin CA,将开关打开
- 系统安全警告 → 确认
完成后 Safari 和大多数 App 的 HTTPS 流量才能被正常解密。
验证证书是否生效
安装完成后,在 ProxyPin 中开启「HTTPS 代理」,然后:
- 访问任意 HTTPS 网站(如 https://example.com)
- 在 ProxyPin 请求列表中找到该请求
- 查看响应体内容——如果能看到 HTML 源码或 JSON 数据,说明证书生效;如果显示加密或乱码,说明证书未正确安装
常见问题
Q:浏览器警告"您的连接不是私密连接"怎么办?
这是因为浏览器不信任 ProxyPin 的根证书。返回对应平台的证书安装步骤,确认证书已安装且信任。如果已经安装仍然警告,可能是浏览器自己的证书存储问题(Firefox 使用独立证书库,需要单独导入)。
Q:Flutter 应用证书固定的情况?
ProxyPin 内置了 Flutter 证书固定绕过,一般无需额外处理。详见 Flutter 绕过证书固定。