Charles是一款代理服务器,通过成为手机/电脑应用层的代理截取请求和响应达到分析抓包的目的,是一款http/https协议网络抓包工具。Charles支持拦截请求与响应、修改请求与修改响应,支持快速重试请求等。
笔者使用Charles最初是为了模拟协议攻击、XSS攻击,后来觉得用于测试接口也挺方便就用来应对一些接口测试场景,最近接触新项目又用于熟悉新项目。由于项目web端和小程序端功能差异较大,想要熟悉项目代码,笔者是通过“玩”小程序了解业务流程,并用Charles查看小程序发送的请求获取服务器接口信息。
Charles官网下载链接:www.charlesproxy.com/download/
PC端支持HTTPS
-
安装
Charles代理证书 -
启动SSL代理并配置站点匹配规则
移动端支持HTTPS
Charles->SSL代理配置->安装Charles代理证书到手机
- 为手机安装证书
手机需要与电脑连接同一wifi或者确保在同一局域网内打开任意手机浏览器,输入chls.pro/ssl下载charles-proxy-ssl-proxying-certificate.pem文件。如果是Android系统,那么下载完成后修改文件的后缀名,由.pem修改为.crt,然后点击安装即可。IOS系统略有不同,但也非常简单。
代理移动端
手机需要与电脑连接同一wifi或者确保在同一局域网内。
-
在
Charles配置代理端口 -
配置
wifi网络->高级选项->代理改为手动,配置电脑的局域网IP地址,以及为Charles配置的代理端口
现在就可以正常代理移动端的http/https请求了。
注意:如果没有监听到小程序发起的请求,可能需要重启小程序或者干掉微信进程重起微信再进入小程序。
Charles支持HTTPS协议的原理
Charles类似Nginx,Nginx是反向代理,是服务器的代理,伪装服务器,Charles则是正向代理,是客户端的代理,伪装客户端。
使用Charles代理后,客户端向服务器发送请求到接收响应的过程中都发生了什么?
- 1、客户端向服务器发起
HTTPS请求; - 2、
Charles拦截客户端的请求,伪装成客户端向服务器进行请求; - 3、服务器向客户端返回服务器的
CA证书; - 4、
Charles拦截服务器的响应,获取服务器CA证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端;
到此,Charles成功截获服务器的CA证书,Charles成为服务器的客户端,Charles成为真实客户端的服务器,如下图所示。
- 5、客户端接收到
Charles的证书后,生成一个对称密钥,用Charles的公钥加密,发送给Charles; - 6、
Charles代理客户端的请求,用自己的私钥解密对称密钥,然后用服务器证书公钥加密,发送给服务器; - 7、服务器用自己的私钥解密对称密钥,向
Charles发送响应; - 8、
Charles拦截服务器的响应,替换成自己的证书后发送给客户端。