目录
1、Charles的Https抓包原理
HTTPS是对数据进行了加密处理的,如果不做任何应对是无法获取其中内容。所以Charles做的就是对客户端把自己伪装成服务器,对服务器把自己伪装成客户端:

- Charles拦截客户端的请求,伪装成客户端向服务器进行请求
- 服务器向“客户端”(实际上是Charles)返回服务器的CA证书
- Charles拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端。(这一步,Charles拿到了服务器证书的公钥)
- 客户端接收到“服务器”(实际上是Charles)的证书后,生成一个对称密钥,用Charles的公钥加密,发送给“服务器”(Charles)
- Charles拦截客户端的响应,用自己的私钥解密对称密钥,然后用服务器证书公钥加密,发送给服务器。(这一步,Charles拿到了对称密钥)
- 服务器用自己的私钥解密对称密钥,向“客户端”(Charles)发送响应
- Charles拦截服务器的响应,替换成自己的证书后发送给客户端
当然,如果用户不选择信任安装Charles的CA证书,Charles也无法获取请求内容。还有一种,如果客户端内置了本身的CA证书,这时如果Charles把自己的证书发送给客户端,客户端会发现与程序内的证书不一致,不予通过,此时Charles也是无法获取信息的。
2、Windows/Mac安装Charles证书
1)安装证书
选择 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate”,如下图:
安装证书:
可以选择证书的安装位置,选择的是本地计算机;
然后为证书选择存储位置,这里必须手动选择存储位置,否则自动选择出来的证书位置仍然是不被信任的。
然后点击浏览,我们手动指定证书的存储位置为“受信任的根证书颁发机构”。
然后点击确定,完成,此时再次进入安装证书的步骤,我们就发现Charles证书已经被系统信任。
直到提示导入成功,如下图:
2)配置SSL的抓取域名:
选择“proxy” ->“SSL Proxying Settings”,如下图:
点击后打开SSL Proxying Settings界面,如下图:
你可以单独配置,也可以设置为所有的HTTPS协议全部允许捕获,如下图:
3、手机安装证书
选择“Help”->”Install Charles Root Certificate on a Mobile Device or remote Browser” (在移动设备或远程浏览器上安装SSL证书)
可以查看到提示你需要设置代理并浏览器访问地址“chls.pro/ssl”,如下图:
在手机端浏览器输入网址“chls.pro/ssl”,如图:
下载证书并信任,如下图:
注:在iOS 10.3之前,当你将安装一个自定义证书,iOS会默认信任,不需要进一步的设置。而iOS 10.3之后,安装新的自定义证书默认是不受信任的。如果要信任已安装的自定义证书,需要手动打开开关以信任证书。
iOS11下需要手动信任已下载好的证书,方法如下:
设置->通用->关于本机->证书信任设置-> 找到charles proxy custom root certificate然后信任该证书即可。
原创文章,作者:iTestCat,保留所有权利,禁止转载,如若转载,请联系作者!
评论列表(1条)
[…] 如果需要抓取HTTPS网站的资源,请查看Charles的HTTPS抓包方法及原理 […]