1. Charles/Fiddler 抓取 HTTPS 的原理(中间人代理+证书信任)与手机端配置步骤?
请解释 Charles 或 Fiddler 抓取 HTTPS 请求的底层原理(中间人代理 + 证书信任),并说明在手机端配置 HTTPS 抓包的完整步骤?
- 中间人代理(MITM)的工作原理
- HTTPS 证书信任机制与证书安装
- 手机端代理配置与系统/用户信任的差异
HTTPS 抓包本质是中间人代理(Man-in-the-Middle)。客户端通过代理访问时,代理向客户端呈现"代理自签的证书",同时代理以客户端身份向真实服务器发起真实 TLS 连接并完成握手。这样代理位于加密链路中间,能解密客户端→代理的流量,也能解密代理→服务器的流量,从而看到明文请求和响应。前提是客户端必须信任代理的自签证书:在手机端把导出的 .pem/.cer 证书安装并开启信任。手机端配置步骤为:电脑端 Charles 开启代理(Proxy→SSL Proxying Settings 勾选 host 并添加*:443),记录电脑 IP 与端口(默认 8888);手机连接同一 Wi-Fi,在 WiFi 高级设置中把代理设为"手动",填入电脑 IP 和端口;然后用手机浏览器访问 chls.pro/ssl(Fiddler 则访问 http://ip:8888 下载证书)下载并安装证书;Android 7.0+ 需把证书安装到系统证书目录(或通过调试包 user 证书信任),iOS 需在"设置→通用→关于本机→证书信任设置"中开启完全信任。完成后即可在 Charles 中看到明文的 HTTPS 请求与响应。
关键在于理解"中间人"的双向 TLS 握手:客户端信任的是代理证书而非真实服务器证书,因此抓包软件必须能支配客户端的信任链。所有抓包遇到证书错误的根源都在于信任链未建立,排查时应先确认证书是否安装且被完全信任。