安卓 HTTPS 抓包证书不信任怎么解决?从装证书到免装证书

6 阅读3分钟

我注意到一个现象,安卓上抓 HTTPS 包,十个报错里八个是"证书不受信任":证书明明照着教程装了,App 里照样一片红,代理工具里看到的全是密文。多数人卡在这反复卸载重装,其实问题不在装没装对,在"装到哪一层、App 认不认"。这篇把安卓证书不信任的根因拆开,按层级把方案排一遍。

报错背后的三层原因

安卓的证书信任分两层:用户证书和系统证书。Android 7 开始,系统默认策略只信任系统证书,App 默认不认用户证书——装了用户证书,浏览器能用,App 照样报证书不信任。Android 14 起,用户证书的安装路径被进一步收窄,很多设备上装用户证书都费劲。再往上还有更硬的关卡:App 自己做证书固定,或者带独立信任库,这种装什么证书都不认,直接拒连。三个原因层层叠加,报错长一个样,根因完全不同。

常见做法和它们的边界

装用户证书是最普遍的做法:设置里下载安装,浏览器立即生效,App 看情况。对应边界是 Android 7+ 的默认策略,App 不认用户证书时这条路直接失效。装系统证书(移到系统证书目录)能覆盖 App 的默认信任,但需要 root 权限,还要处理 Android 14 对系统分区的限制,操作成本明显高一档。证书固定和独立信任库这两类目标,装系统证书也没用——它们校验的已经不是"证书链可不可信",而是"证书是不是我写死的那个"。

免装证书的路线

既然装证书这条路在安卓上越来越窄,另一条路是根本不装证书:从应用内部直接取明文。抓包鹰 TraceEagle 的应用层抓包就是这么做的——在程序数据收发的必经点取数,拿到就是明文,不经过中间人,证书装不装、App 信不信任都不影响。安卓端这几种方法全程免装证书,没有 root 也能抓。如果你手头正好有 root 设备,TraceEagle 也支持直接把根证书装进系统证书库,省去用户证书那套流程。

实操顺序

安卓上排查 HTTPS 抓包证书不信任,按这个顺序:先判断 App 是不是普通信任链(不固定证书、无独立信任库)——是的话,root 设备直接装系统证书,非 root 设备优先走免装证书的应用层抓包;遇到证书固定或自研加密,别在证书上耗时间,直接切应用层取明文。抓包之前先在 TraceEagle 里确认根证书信任状态,装一次之后所有会话都能解密。

安卓 HTTPS 抓包证书不信任,本质是"证书装在系统信任链之外"或"App 根本不走证书校验"两类问题:前者用系统证书或免装证书解决,后者只有应用层取明文这一条路。按这个逻辑排查,比反复卸载重装证书省事得多。