一、准备工作
1. 安装 Charles Proxy
- 官网下载:https://www.charlesproxy.com/
- 支持 macOS、Windows、Linux
2. 基本配置
# 启动 Charles
# 确保 Proxy → macOS Proxy/Windows Proxy 已勾选
二、HTTPS 抓取核心配置
1. 安装 Charles 根证书(关键步骤)
macOS:
Help → SSL Proxying → Install Charles Root Certificate
# 还需要在钥匙串访问中信任该证书
Windows:
Help → SSL Proxying → Install Charles Root Certificate
# 证书会自动安装到受信任的根证书颁发机构
iOS/Android 手机:
1. 设置手机代理到电脑 IP:8888
2. 手机浏览器访问 chls.pro/ssl 下载证书
3. 在系统中安装并信任证书
2. 启用 SSL Proxying
Proxy → SSL Proxying Settings
- 勾选 "Enable SSL Proxying"
- 添加需要抓取的域名(或使用 *:443 抓取所有)
三、具体抓取流程
1. 基础 HTTP 抓取
步骤:
1. 打开 Charles
2. 开启代理 (默认端口 8888)
3. 客户端配置代理到 127.0.0.1:8888
4. 发送请求 → Charles 自动捕获
2. HTTPS 抓取特殊处理
# 需要额外步骤的原因:
HTTPS 使用加密传输,Charles 需要作为"中间人"解密
工作流程:
客户端 → [HTTPS请求] → Charles(解密) → 服务器
服务器 → [HTTPS响应] → Charles(重新加密) → 客户端
四、常见问题解决
1. 证书不被信任
# 解决方案:
1. 重新安装根证书
2. 确保证书在"受信任的根证书颁发机构"
3. iOS 14+:需要在"关于本机"→"证书信任设置"中完全信任
2. 抓不到某些 App 的请求
可能原因:
1. App 使用证书绑定 (SSL Pinning)
2. 使用自定义证书验证
解决方案:
- 越狱/root 后安装插件绕过
- 使用 objection/frida 等工具
- objection -g com.app.name android sslpinning disable
3. Charles 显示 unknown 或乱码
原因:SSL Proxying 未正确配置
解决:
1. 确认目标域名已添加到 SSL Proxying 列表
2. 重新安装客户端证书
3. 重启 Charles 和客户端应用
五、高级技巧
1. 特定域名过滤
Proxy → SSL Proxying Settings → Add
Host: *.example.com
Port: 443
2. 断点调试 (Breakpoints)
1. Proxy → Breakpoint Settings → Add
2. 设置断点条件(域名、路径等)
3. 请求会在发送前暂停,可修改参数
3. 重写请求/响应 (Rewrite)
Tools → Rewrite
- 可修改请求头、参数
- 可修改响应内容、状态码
4. 映射功能 (Map)
# 本地文件替换线上资源
Tools → Map Local
# 或重定向到其他域名
Tools → Map Remote
六、移动端配置示例
iOS 配置:
步骤:
1. 电脑和手机同一 WiFi
2. 查看电脑 IP: Help → Local IP Address
3. 手机 WiFi 设置代理: 手动 → 输入电脑IP:8888
4. 手机 Safari 访问: chls.pro/ssl 安装证书
5. iOS 设置 → 通用 → 关于本机 → 证书信任设置 → 启用完全信任
Android 配置:
步骤:
1. 类似 iOS 配置代理
2. 浏览器访问 chls.pro/ssl 下载证书
3. 设置 → 安全 → 从SD卡安装证书
4. Android 7+ 可能需要额外配置用户证书
七、安全注意事项
仅用于开发和测试环境
不要在生产环境安装 Charles 证书
及时删除不再需要的证书
注意抓取敏感数据的法律风险
八、替代方案对比
| 工具 |
优点 |
缺点 |
|---|
| Charles |
功能全面,界面友好 |
收费,部分功能需付费 |
| Fiddler |
免费,Windows 友好 |
对 macOS 支持一般 |
| mitmproxy |
开源,命令行强大 |
学习曲线较陡 |
| Wireshark |
底层网络分析 |
HTTPS 解密配置复杂 |
这个流程涵盖了从基础配置到高级调试的完整 HTTPS 抓取方案。实际使用时建议从简单 HTTP 开始测试,逐步配置 HTTPS 抓取。