httpCanary 中文文档 下载 App

HTTPS 响应全是乱码:解密失败排查

问题描述

httpCanary 启动后,HTTP 请求可以正常查看,但 HTTPS 请求的响应体显示为乱码、base64 或加密数据——这说明 httpCanary 没有成功解密 HTTPS 流量。

根本原因

HTTPS 解密需要客户端信任 httpCanary 的 CA 证书。如果证书没有被信任,客户端(目标 App)会拒绝和 httpCanary 建立有效的 TLS 连接,httpCanary 拿到的就是密文。

排查清单

按以下顺序一步步排查,解决概率最高的排在最前面。

一、确认证书已安装

  1. 打开 httpCanary → 设置 → SSL 证书设置
  2. 查看根证书是否已安装
  3. 如果显示未安装,重新走一遍 证书安装流程

二、Android 7.0+ 需要系统证书

Android 7.0 引入网络安全配置后,默认不信任用户安装的证书。如果你的设备是 Android 7.0+,仅仅按常规步骤装了证书还不够。

两种解决路径:

路径 A:Root 设备 → 系统证书

  1. 在 httpCanary 设置中导出根证书
  2. 把证书复制到 /system/etc/security/cacerts/ 目录
  3. 重启设备
  4. 详见 Android 7+ 系统证书

路径 B:模拟器 → 更容易

  1. 使用 Android 模拟器(推荐带 Google API 的系统镜像)
  2. 开启 Writable System Image
  3. 用 adb push 证书到系统目录
  4. 重启模拟器

三、目标 App 开启了 SSL Pinning

SSL Pinning 是另一个问题——App 在代码里硬编码了服务器证书指纹,不依赖系统信任链。就算把 httpCanary 的证书装成系统证书也没用。

检查方法:如果只有 特定 App 的 HTTPS 抓不到(比如微信支付、银行 App),而浏览器和其他普通 App 的 HTTPS 能正常解密,那就是 SSL Pinning。

解决方案见下一页 SSL Pinning 绕过。

四、VPN 连接异常

  1. 停止 httpCanary 抓包
  2. 在系统设置里手动删除 httpCanary 创建的 VPN 配置
  3. 重新启动 httpCanary 抓包,让它重新创建 VPN 连接
  4. 这能修复部分 VPN 隧道状态异常导致的问题

五、证书文件损坏

极少数情况下证书文件可能损坏:

  1. 在 httpCanary 设置中找到「重置 SSL 证书」选项
  2. 重置后重新走证书安装流程
  3. 重启应用后再试

六、应用是 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 网站来验证:

  1. 开启 httpCanary 抓包
  2. 打开浏览器访问 https://example.com
  3. 在 httpCanary 请求列表中找到这个请求
  4. 切换到 Text 或 JSON 视图看响应体——能看到 HTML 内容就是解密成功

浏览器没有 SSL Pinning,如果浏览器的 HTTPS 能正常解密,说明证书本身没问题,问题出在 目标 App 上(大概率是 SSL Pinning)。