安卓HTTPS抓包证书安装
用 reqable 抓 HTTPS 时列表里全是握手失败,九成是根证书的问题。本篇把安卓端证书安装的完整流程和几个典型失败场景整理在一起,配套的选型背景见手机抓包工具怎么选。
为什么必须装证书
MITM 方式的原理是:工具用自己的根证书给远端站点「重签」一份证书,替客户端完成握手。客户端只信任装进系统证书库的那份根证书,握手才走得通。所以装证书不是可选步骤——不装,HTTPS 在列表里就是一排握手失败。
reqable 为每台设备生成不同的根证书、密钥随机,证书本身不存在被第三方冒用的问题;有自定义根证书的话也支持导入 .p12。
桌面端:一键装
桌面端顶部操作栏的盾牌图标就是证书入口,点「现在安装」,系统弹窗确认后自动写入证书库。黄色盾牌表示未装好,绿色表示就绪。Linux 下 Chrome、Firefox 有自己的证书体系,记得按提示再往浏览器里装一份。
安卓端:分用户证书与系统证书两条路
- 用户证书:不用 Root,走系统设置安装——
设置 → 安全 → 加密与凭据 → 安装证书 → CA 证书,选中导出的证书文件即可。 - 系统证书:需要 Root,装进系统目录后对所有 App 生效;Root 设备可以直接在工具里一键装。
装完后,工具侧的证书管理页会显示安装状态,没识别到时保持「未知状态」属正常现象(非 Root 设备检测不到用户证书)。
Android 7.0+ 的关键限制
用户证书默认只对主动声明信任它的 App 生效:
- 抓自己开发的 App:在项目的网络安全配置里声明信任用户证书,或按要求配置一条 gradle 依赖,debug 包自动带上配置文件;
- Flutter 应用走不了这条路,需要专门的增强方案;
- 抓三方 App 的 HTTPS:只能上系统证书(Root),或配合模拟器场景处理。
协同模式能省一步
手机扫码连上桌面端的协同模式有个隐藏好处:桌面端的根证书会自动同步到手机,不用再手动导出导入,两台设备共用同一份证书。经常手机、电脑两头抓的人建议直接用这个模式。
典型失败速查
- 握手失败:证书没装 / 装错设备(桌面抓包装桌面端证书,手机自抓装手机端证书,两者不通用);
- 装了还是握手失败:撞上 Android 7.0+ 的用户证书限制,按上一节处理;
- 个别 App 连不上网:该 App 检测到代理主动断连,属于目标 App 的反调试行为,换个思路在桌面端做映射处理。
工具本身的功能与获取入口,整理在 https://reqable.boop.uno/,这里不再展开。