Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当程序连接Charles的代理访问互联网时,Charles可以监控这个程序发送和接收的所有数据。它允许一个开发者查看所有连接互联网的HTTP通信,这些包括request,response和HTTP headers(包含cookies与caching信息)。
Charles主要功能:
1.支持SSL(SecureSockets Layer,安全套接层)代理。可以截取分析SSL的请求。
2.支持流量控制。可以模拟慢速网络以及等待时间(latency)较长的请求。
3.支持AJAX调试。可以自动将json或xml数据格式化,方便查看。
4.支持AMF调试。可以将FlashRemoting或FlexRemoting信息格式化,方便查看。
5.支持重发网络请求,方便后端调试。
6.支持修改网络请求参数,request和response。
7.支持网络请求的截获并动态修改。
8.检查HTML,CSS和RSS内容是否符合W3C标准。
一、安装
1.1 下载程序包
前往charles官网,地址:https://www.charlesproxy.com/download/。
目前charles支持三种操作系统共5个版本,本文以MacOS系统版本讲解。
注意:Charles是收费软件,可以免费试用30天。试用期过后,未付费的用户仍然可以继续使用,但是每次使用时间不能超过30分钟,并且启动时将会有10秒种的延时。
1.2安装程序包
1.2.1 dmg包安装
1)安装如下图
2)安装完成后,首次启动,需要等待10s,如下图
3)授予charles自动配置所在机器的网络设置权限,选择“Grant Privileges“,如果意外点错“NotYet“,在程序下次启动会重新询问,如下图。
4)获得权限后,进入Charles主界面
设置HTTP Prxoy端口号,Proxy--Proxy Settings,一般设置为8888。
1.2.2 Mac端Charles Root Certificate证书安装
1)Help栏SSL Proxying —InstallCharles Root Certificate
2)进行CA根证书安装
选择“始终信任“
1.2.3移动端证书安装
1)安装提示
Help栏SSL Proxying —Install Charles Root Certificate on a MobileDevice or Remote Browser。
将移动设备连接上网络代理
2)根据提示使用IOS设备连接代理192.168.0.106,端口号8888,
此时charles会提示有连接charles的请求,选择“Allow“,如果意外选择”Deny“,会在程序重新启动后再次询问。
3)移动端证书安装
网络代理设置好后,打开safari浏览器(推荐使用safari,其他品牌浏览器可能存在兼容性问题),在地址栏输入chls.pro/ssl。
配置描述文件,选择“允许“。
安装描述文件
“安装“证书
全部安装完成后,在iphone设置 --通用 --描述文件与设备管理,查看已安装的证书
4)启用SSL解析
右键Enable SSL
所有步骤完成,结果仍然无法进行抓包,检查信任证书是否完全开启,ios10.3之后加入新的特性,需要在IOS设备中,通用 --关于本机 --证书信任设置,针对CA根证书开启完全信任,通过后如下图。
点击视图中的“扫把”图标,清空列表后,再次抓包。
如上图所示,现在已经可以进行完全解析https的抓包。
二、使用
Charles提供强大的视图功能,能够方便在可视化界面进行操作。
2.1视图功能
Structure(结构)视图
Sequence(序列)视图
根据请求的时间顺序进行接口展示
2.2Modify修改网络请求
在日常的测试开发过程中,经常需要修改接口中的request或者response参数,下面举例说明如何修改某接口中的请求request参数。
1)选中某个接口
2)点击Edit功能按钮
3)选择请求数据以Form格式显示
4)选中下图中osType参数,修改值为02,最后执行
5)查看修改后的结果
2.3设置重复网络请求
1)右键对应接口,选择Repeat或者RepeatAdavanced,Repeat表示重复请求一次
2)Repeat Advanced设置请求的单位时间次数,Iterations重复次数,Concurrency并发,Repeatdelay请求间隔。
执行重复请求10次,结果如下图。
2.4设置BreakPoint断点debug模式
1)接口右键选择Breakpoints
2)修改请求参数4150 --4160,以Form方式显示,执行。
3)修改后请求的结果
注意:同样的方式可以修改服务端给到前端的response参数,伪造不同的接口返回,校验客户端业务逻辑。
2.5 MapLocal映射本地
将2.4中提到的接口修改response数据,修改endDate字段为“133000”,映射到本地,方便今后同样需要请求改参数值的情况。
1)接口选择save response保留至本地,如下图。
2)右键接口mapLocal,选择之前保留在本地文件
3)再次请求,同样的接口,直接映射本地文件中的response数据。
2.5网络流量控制
日常的测试过程需要模拟弱网、2g、3g、4g等网络带宽的情况,Charles同样提供相应的功能。
1)Proxy --Throttle Settings打开网络带宽限值界面,选中“EnableThrottling”。
Throttle preset阀门预设配置
Bandwidth带宽
Utilisation利用率
Round-trip-latency往返延迟
MTU最大传输单元(Maximum Transmission Unit)
Reliability可靠性
Stability稳定性
Unstable quality range不稳定质量幅度
2.6其他常用功能
1)Focus关注,指定关注某个接口。
2)Ignore忽略,不再关注某个接口,撤回在Proxy--Recording Settings--Exclude。
3)Sort By排序,提供根据Name、Start Time、End Time、Request Size、Response Size、Size、Duration对接口进行排序。
三、工作原理
通过上述的第一、二章节,对怎样安装使用Charles进行了介绍,那Charles是如何工作的呢?
先来看看官网的介绍:
Charles is a web proxy (HTTP Proxy / HTTP Monitor) thatruns on your own computer. Your web browser (or any other Internet application)is then configured to access the Internet through Charles, and Charles is thenable to record and display for you all of the data that is sent and received.
In Web and Internet development you are unable to seewhat is being sent and received between your web browser / client and theserver. Without this visibility it is difficult and time-consuming to determineexactly where the fault is. Charles makes it easy to see what is happening, soyou can quickly diagnose and fix problems.
Charles作为一个“中间人代理”,当客户端和服务器通信时,Charles接收服务器的证书,但动态生成一张证书发送给客户端,也就是说Charles作为中间代理在客户端和服务器之间通信,所以通信的数据可以被Charles拦截并解密。由于Charles更改了证书,浏览器校验不通过会给出安全警告,必须安装Charles的CA证书后才能进行正常访问。具体流程如下:
1.客户端向服务器发起HTTPS请求。
2.Charles拦截客户端的请求,伪装成客户端向服务器进行请求。
3.服务器向“客户端”(实际上是Charles)返回服务器的CA证书。
4.Charles拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端。(这一步,Charles拿到了服务器证书的公钥)
5.客户端接收到服务器(实际上是Charles)的证书后,生成一个对称密钥,用Charles的公钥加密,发送给服务器(实际是Charles)。
6.Charles拦截客户端的响应,用自己的私钥解密对称密钥,然后用服务器证书公钥加密,发送给服务器。(这一步,Charles拿到了对称密钥)
7.服务器用自己的私钥解密对称密钥,向客户端(实际是Charles)发送响应。
8.Charles拦截服务器的响应,替换成自己的证书后发送给客户端。
9.至此,连接建立,Charles拿到了服务器证书的公钥和客户端与服务器协商的对称密钥,之后就可以解密或者修改加密的报文了。
HTTPS抓包的原理还是挺简单的,简单来说,就是Charles作为“中间人代理”,拿到了服务器证书公钥和HTTPS连接的对称密钥,前提是客户端选择信任并安装Charles的CA证书,否则客户端就会“报警”并中止连接。
希望大家通过此文能够对Charles抓包工具有系统完整的了解,谢谢!
参考文献:
1.rushjs.浅谈Charles抓取HTTPS原理. https://www.jianshu.com/p/405f9d76f8c4.
来自金管家测试