为了能让 Charles 代理 HTTPS,之前到网上看了很多教程,曾经自己捣鼓过,不过一直都没能成功,索性就不弄了。

这两天为了debug,不得不代理 https 的请求,经过半天的折腾竟然成功了。为了让以后自己不那么费劲,就写了这篇文章总结。

本文环境:

  • charles 版本:4.2.6
  • chrome 版本: 70.0.3538.77(正式版本)
  • SwitchyOmega 版本:2.5.20

1、安装证书

cert

安装成功后,能在系统 钥匙串访问 中找到所安装的证书:

success

此时证书有可能是不被信任的状态,我们通过双击将其更改成 始终信任

always

2、配置代理

在 Charles 中配置代理规则:

proxy

3、设置代理规则

将 charles 中的代理规则复写到 SwitchyOmega 的匹配规则里:

rules

为了让 https 生效,需选择 Socket5 代理协议,端口填写 8889

4、开启 SSL 代理

上述 3 步操作已经完成 charles 的代理工作,剩下的就是对请求进行开启代理。

以访问百度(https://www.baidu.com)为例,打开 charles 后捕获到的请求如下:

capture

注意截取的请求内容都是 <unknown>,而且图标是一个 加锁 的图标。

通过右键 Enable SSL Proxying,让我们开启对百度首页的 HTTPS 代理:

enable

再次访问百度首页,就能看到请求现在成功被代理了,图标也从加锁状态变更成 互联网 图标了:

proxy

注意,如果你通过右键 Enable SSL Proxying 后,刷新提示的是链接不安全:

error

那么也不需要担心,有可能是证书安装失效导致的,将证书删除后重新安装一遍,就能解决了。(参考第一步的操作)

5、Tips:批量添加 SSL 匹配规则

上述我们通过 Enable SSL Proxying 针对每个网站开启 SSL 代理,其实就是添加了一条匹配规则而已:

rules

我们还可以使用通配符,比如对淘宝域名下的页面都开启 SSL 代理:

match

这样访问淘宝页面后,就能看到 *.taobao.com 的资源进行代理了:

matches

参考文档