5月27日 21:30
如何使用 whistle 拦截 HTTPS 请求,证书如何配置?
答案
whistle 作为本地代理,对 HTTPS 请求执行中间人解密:收到客户端 CONNECT 后,用自签 RootCA 为目标域名动态签发证书,再以该证书与客户端建立 TLS 连接,明文拿到请求内容后转发给真实服务器。要让客户端信任这些动态证书,必须把 whistle 的 RootCA 装进系统或浏览器的信任链。
证书配置
-
启动并打开管理界面
bashnpm i -g whistle && w2 start浏览器访问
http://127.0.0.1:8899。 -
下载根证书
管理界面点击 HTTPS 标签,下载 RootCA。
-
安装到系统信任链
- Mac:钥匙串访问 → 导入 → 双击设为"始终信任"
- Windows:双击证书 → 安装到"本地计算机" → 放入"受信任的根证书颁发机构"
- Linux:
sudo cp rootCA.crt /usr/local/share/ca-certificates/ && sudo update-ca-certificates
-
开启拦截
勾选 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 高版本为什么抓不到包?——用户证书信任域变更