认识Charles
Charles 是什么
Charles 是一个运行在计算机上的web代理(HTTP代理/ HTTP监视器),浏览器(或任何其他互联网应用程序)被配置为通过Charles访问互联网,Charles能够记录和显示所有发送和接收的数据。
Charles 的作用
Charles 使调试快速、可靠和先进;节省时间
Charles 的抓包原理
如果是HTTP请求,因为数据本身并没有加密所以请求内容和返回结果是直接展现出来的。
但HTTPS是对数据进行了加密处理的,如果不做任何应对是无法获取其中内容。所以Charles做的就是对客户端把自己伪装成服务器,对服务器把自己伪装成客户端。具体步骤:
1、客户端向服务器发起https请求
2、Charles 拦截客户端的请求,伪装成客户端向服务器进行请求
3、服务器向“客户端”(实际上Charles)返回服务器的CA证书
4、Charles拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端(这一步,Charles拿到了服务器的证书的公钥)
5、客户端接收到“服务器”(实际上是Charles)的证书后,生成一个对称密钥,用Charles的公钥加密,发送给“服务器”(Charles)
6、Charles拦截客户端的响应,用自己的私钥解密对称密钥,然后用服务器证书公钥加密,发送给服务器(Charles拿到了对称密钥)
7、服务器用自己的私钥解密对称密钥,向“客户端”(Charles)发送响应
8、Charles拦截服务器的响应,替换成自己的证书后发送给客户端
至此,连接建立,Charles拿到了 服务器证书的公钥 和 客户端与服务器协商的对称密钥,之后就可以解密或者修改加密的报文了。
安装步骤
工具下载
首先下载安装Charles工具:https://www.charlesproxy.com/download/
注册码:https://www.zzzmode.com/mytools/charles/
Registered Name: https://zhile.io
License Key: 48891cf209c6d32bf4
电脑端安装Charles的CA证书
Charles需要下载安装ssl/https证书,因为Charles是作为中间的过滤器使用的,Charles如果不配置SSL通用证书,会导致HPPTS协议的域名抓取失败/乱码的现象;
选择 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate”
信任Charles证书,选中Charles证书,右键查看详情,信任该证书(虽然没影响)
抓取https请求,Charles代理设置
在设置了第二步抓取http请求之后,Charles对于https请求会显示unkonwn 就是不能解析https请求,需要的步骤已经提示看的右边:SSL Proxying not enabled for this host……
顶部工具栏:Proxy-> SSL Proxying Settings->SSL Proxying:勾选Enable SSL Proxying
添加需要拦截https的域名host,端口是443
这里是把所有的host都设置进去,也可以用 * 代替会将所有的https请求都捕获
Android & IOS 手机设置抓包
1、证书安装,点击 help--ssl proxying-- install charles root certificate on a mobile device or remote brower--有以下弹窗
1)首先要确认手机和电脑处于同一个局域网中,连接同一个wifi,使用ping ip
2)检查你的device 设备,并设置设备的无线网络代理是MAC设备的IP地址,【通过Charles 中点击 help➡️local IP Address来查看MAC设备的IP地址,以及设置的端口号,默认是8888
还有通过这个来看IP
2、在Android、IOS设备上;Android选择无线网络,修改网络,设置代理为MAC设备的IP地址,IOS 选择无线网,修改网络,设置代理为MAC设备的IP地址
2.1、Android设备安装设置
1)进入手机设置界面打开无线局域网设置:
修改网络,代理类型为手动,设置代理为MAC设备的IP
2)在Android 手机浏览器输入 chls.pro/ssl 下载证书,【Android设备使用非chrome浏览器下载的charles证书默认不能安装成功,可以在无线网络中,点击WLAN设置,选择安装证书,此时需要输入证书名称(该证书是下载到本地的 .pem 证书),点击确定 OR如果安装还不成功,请尝试把文件重命名为.crt,再重复上述操作】
完成了charles ca证书的安装了。接下来就可以任意访问手机端的app,然后再charlse端进行抓包
2.2、IOS设备安装设置
1)进入手机设置界面打开无线局域网设置:
2)打开手机的浏览器,输入
chls.pro/ssl 会弹出下载证书界面点击安装即可。
3)下载完成后,需要在设置中安装相应的证书。
iOS 10.3系统及以上,需要在 在设置-通用-关于本机-证书信任设置->打开手机端对charles proxy ca证书的信任
至此,就完成了charles ca证书的安装了。接下来就可以任意访问手机端的app,然后再charlse端进行抓包
常见问题
问题1:权限问题
在启动和设置代理时报错 Charles cannot configure your proxy settings while it is on a read-only volume. Perhaps you are running Charles from the disk image? If so, please copy Charles to the Applications folder and run it again. Otherwise please ensure that Charles is running on a volume that is read-write and try again.
解决方法:控制台执行如下命令
sudo chown -R root "/Applications/Charles.app/Contents/Resources"
sudo chmod -R u+s "/Applications/Charles.app/Contents/Resources"
然后重启charles