为了能让 Charles 代理 HTTPS,之前到网上看了很多教程,曾经自己捣鼓过,不过一直都没能成功,索性就不弄了。
这两天为了debug,不得不代理 https 的请求,经过半天的折腾竟然成功了。为了让以后自己不那么费劲,就写了这篇文章总结。
本文环境:
- charles 版本:4.2.6
- chrome 版本: 70.0.3538.77(正式版本)
- SwitchyOmega 版本:2.5.20
1、安装证书
安装成功后,能在系统 钥匙串访问 中找到所安装的证书:
此时证书有可能是不被信任的状态,我们通过双击将其更改成 始终信任:
2、配置代理
在 Charles 中配置代理规则:
3、设置代理规则
将 charles 中的代理规则复写到 SwitchyOmega 的匹配规则里:
为了让 https 生效,需选择 Socket5 代理协议,端口填写
8889
4、开启 SSL 代理
上述 3 步操作已经完成 charles 的代理工作,剩下的就是对请求进行开启代理。
以访问百度(https://www.baidu.com)为例,打开 charles 后捕获到的请求如下:
注意截取的请求内容都是 <unknown>
,而且图标是一个 加锁 的图标。
通过右键 Enable SSL Proxying,让我们开启对百度首页的 HTTPS 代理:
再次访问百度首页,就能看到请求现在成功被代理了,图标也从加锁状态变更成 互联网 图标了:
注意,如果你通过右键 Enable SSL Proxying 后,刷新提示的是链接不安全:
那么也不需要担心,有可能是证书安装失效导致的,将证书删除后重新安装一遍,就能解决了。(参考第一步的操作)
5、Tips:批量添加 SSL 匹配规则
上述我们通过 Enable SSL Proxying 针对每个网站开启 SSL 代理,其实就是添加了一条匹配规则而已:
我们还可以使用通配符,比如对淘宝域名下的页面都开启 SSL 代理:
这样访问淘宝页面后,就能看到 *.taobao.com
的资源进行代理了:
参考文档
- mac环境下使用Charles抓包Https请求:包含了 mac 和 ios 端对 https 抓包的支持
- HTTP/HTTPS抓包工具Charles:主要看一下如何设置 HTTPS 抓包