HTTPS 响应全是乱码:解密失败排查
问题描述
httpCanary 启动后,HTTP 请求可以正常查看,但 HTTPS 请求的响应体显示为乱码、base64 或加密数据——这说明 httpCanary 没有成功解密 HTTPS 流量。
根本原因
HTTPS 解密需要客户端信任 httpCanary 的 CA 证书。如果证书没有被信任,客户端(目标 App)会拒绝和 httpCanary 建立有效的 TLS 连接,httpCanary 拿到的就是密文。
排查清单
按以下顺序一步步排查,解决概率最高的排在最前面。
一、确认证书已安装
- 打开 httpCanary → 设置 → SSL 证书设置
- 查看根证书是否已安装
- 如果显示未安装,重新走一遍 证书安装流程
二、Android 7.0+ 需要系统证书
Android 7.0 引入网络安全配置后,默认不信任用户安装的证书。如果你的设备是 Android 7.0+,仅仅按常规步骤装了证书还不够。
两种解决路径:
路径 A:Root 设备 → 系统证书
- 在 httpCanary 设置中导出根证书
- 把证书复制到
/system/etc/security/cacerts/目录 - 重启设备
- 详见 Android 7+ 系统证书
路径 B:模拟器 → 更容易
- 使用 Android 模拟器(推荐带 Google API 的系统镜像)
- 开启 Writable System Image
- 用 adb push 证书到系统目录
- 重启模拟器
三、目标 App 开启了 SSL Pinning
SSL Pinning 是另一个问题——App 在代码里硬编码了服务器证书指纹,不依赖系统信任链。就算把 httpCanary 的证书装成系统证书也没用。
检查方法:如果只有 特定 App 的 HTTPS 抓不到(比如微信支付、银行 App),而浏览器和其他普通 App 的 HTTPS 能正常解密,那就是 SSL Pinning。
解决方案见下一页 SSL Pinning 绕过。
四、VPN 连接异常
- 停止 httpCanary 抓包
- 在系统设置里手动删除 httpCanary 创建的 VPN 配置
- 重新启动 httpCanary 抓包,让它重新创建 VPN 连接
- 这能修复部分 VPN 隧道状态异常导致的问题
五、证书文件损坏
极少数情况下证书文件可能损坏:
- 在 httpCanary 设置中找到「重置 SSL 证书」选项
- 重置后重新走证书安装流程
- 重启应用后再试
六、应用是 HTTP/3(QUIC)
部分新版 App 使用 HTTP/3 协议(基于 QUIC)。httpCanary 的某些版本对 HTTP/3 的支持还不完善——如果抓到的 HTTPS 请求都是 HTTP/3 协议,可能出现解密失败。
检查方法:在请求详情页的总览标签看协议版本。如果显示 h3 或 quic,说明是 HTTP/3 请求。
临时解决方案:强制 App 使用 HTTP/2 或 HTTP/1.1(某些 App 设置里有协议开关),或者在 WiFi 设置里禁用 QUIC。
快速验证方法
每做一步修改后,用浏览器访问一个 HTTPS 网站来验证:
- 开启 httpCanary 抓包
- 打开浏览器访问
https://example.com - 在 httpCanary 请求列表中找到这个请求
- 切换到 Text 或 JSON 视图看响应体——能看到 HTML 内容就是解密成功
浏览器没有 SSL Pinning,如果浏览器的 HTTPS 能正常解密,说明证书本身没问题,问题出在 目标 App 上(大概率是 SSL Pinning)。