5月27日 21:30

如何使用 whistle 拦截 HTTPS 请求,证书如何配置?

答案

whistle 作为本地代理,对 HTTPS 请求执行中间人解密:收到客户端 CONNECT 后,用自签 RootCA 为目标域名动态签发证书,再以该证书与客户端建立 TLS 连接,明文拿到请求内容后转发给真实服务器。要让客户端信任这些动态证书,必须把 whistle 的 RootCA 装进系统或浏览器的信任链。

证书配置

  1. 启动并打开管理界面

    bash
    npm i -g whistle && w2 start

    浏览器访问 http://127.0.0.1:8899

  2. 下载根证书

    管理界面点击 HTTPS 标签,下载 RootCA。

  3. 安装到系统信任链

    • Mac:钥匙串访问 → 导入 → 双击设为"始终信任"
    • Windows:双击证书 → 安装到"本地计算机" → 放入"受信任的根证书颁发机构"
    • Linuxsudo cp rootCA.crt /usr/local/share/ca-certificates/ && sudo update-ca-certificates
  4. 开启拦截

    勾选 HTTPS 面板的 "Capture HTTPS CONNECTs";只想拦截特定域名用规则 example.com filter://intercept

移动端

手机连同一 Wi-Fi,浏览器访问 http://rootca.pro 下载证书,系统设置中信任该证书,再将手机代理指向电脑 IP:8899。

踩坑点

  • Android 7+:应用默认不信任用户证书,需 root 或配置 network_security_config
  • iOS 10.3+:安装后还得到 设置 → 通用 → 关于本机 → 证书信任设置 手动开启
  • Firefox:独立证书库,需在 about:preferences 单独导入 RootCA
  • 证书锁定:部分 App 校验服务器证书指纹,代理无法拦截

追问

  • whistle 拦截 HTTPS 的原理?——中间人代理 + 动态签发证书
  • 如何只拦截特定域名?——filter://intercept 规则
  • Android 高版本为什么抓不到包?——用户证书信任域变更
标签:Whistle