Charles
一、Charles简介
1、是什么
俗称青花瓷,Java语言开发,是一款基于HTTP协议的代理服务器,可截取请求和请求结果达到分析抓包的目的。
2、组件介绍
(1)主导航栏
e. 开启/关闭断点设置(✅)
===》用户对app体验要求高 异常数据时导致crash-闪退 ANR-应用无响应 application not response 无限加载
修改前端数据目的:
1、安全测试,修改密码页面抓包,账号明文,密码加密,将加密的字符串改成自己密码
修改后端数据目的:更改接口参数 增加或删除等破坏性操作
验证前端代码的健壮性
扫把按钮:点击之后可清除抓取到的所有请求
图标按钮:红点亮起说明正在抓取请求,红点展示为灰色说明目前不在抓取请求状态
乌龟按钮:灰色乌龟是网速设置正常,绿色乌龟指慢速网速开启了
六角形图标:断点图标,灰色说明断点未开启,红色说明在使用断点
钢笔图标:编辑请求,点击之后可以修改请求的内容 – (在Charles中有效)
刷新图标:重复发送请求的图标,先选定某一请求点击该图标则请求会被再次发送
对号图标:检验返回的请求-是否符合W3C
扳手图标:对应于导航栏中的tools图标,有些许功能
设置图标:设置charles中的情况
(2)请求栏
(3)数据栏
Overview:会展示该请求的一个大体情况,例如请求头,请求响应结束时间,请求开始时间以及自己的notes等
content:请求的具体内容和服务器的响应内容
summary:也是展示一个该请求的大体资源分布情况。例如:服务器响应了多长时间,host是什么等等
chart:以表格形式告诉我们一个响应时间的分布情况。
notes:点击之后自己可以对该请求记录一些东西,方便后续查看该接口的用途,可在overview中查看
headers:请求/响应头信息
query string:请求参数
text:文本形式展示响应内容
hex:16进制
json:以json格式查看响应内容内容,简单明了
json text:将json格式的内容展开书写
raw:原始数据信息
3、主要功能
(1)HTTP和HTTPS代理
(2)流量控制 — 弱网环境的测试
(3)接口并发请求 — 可以同一时间执行多个请求,简单的性能测试
(4)重发网络请求 — 接口测试,用的比较少
(5)断点调试 — 用户对app体验要求高,异常数据时导致crash-闪退、ANR-应用无响应、无限加载,打断点来修改请求和请求结果数据构造异常场景
修改前端数据:
安全测试,修改密码页面抓包,账号明文,密码加密,将加密的字符串改成自己密码
修改后端数据:
验证前端代码的健壮性,更改接口参数,增加或删除等破坏性操作
二、Charles抓取HTTPS原理
1、https简介
在HTTP传输层之上加了一个安全层(SSL或TLS协议实现),可以做到以下3点:
数据的保密性
校验双方身份的真实性
数据的完整性
(1) 数据的保密性
数据要保密,就需要对数据进行加密。加密算法可以分为2类,一类是对称加密算法,另一类是非对称加密算法。
对称加密算法,加密和解密使用相同的密钥,优点是加密速度快,缺点是如果密钥泄露的话就无法做到保密了。常见的对称加密算法有DES、AES等。
非对称加密算法,又叫公开密钥加密。需要有2个密钥,公钥和私钥,公钥向所有人公开,私钥不公开。用公钥加密的数据只有私钥才能解密;反之,用私钥加密的数据只有公钥才能解密。因为这种特性,非对称加密算法可以用来校验数字签名,下面会具体讲解。
很显然,仅使用对称加密算法是不现实的,互联网中通信的双方大多是临时建立的连接,不可能提前协商好密钥,而且密钥也要进行传输,无法保证密钥本身的安全性。
如果使用非对称加密,客户端向服务器发送数据是安全的,客户端用服务器的公钥进行加密,只有服务器用自己的私钥才能解密。但如果服务器用私钥对数据进行加密,则所有人都可以用公钥进行解密,这是不安全的。
HTTPS的解决方案是这样的:用非对称算法随机加密出一个对称密钥,然后双方用对称密钥进行通信。具体来说,就是客户端生成一个随机密钥,用服务器的公钥对这个密钥进行非对称加密,服务器用私钥进行解密,然后双方就用这个对称密钥来进行数据加密了。
(2)校验双方身份的真实性
上面说了加密,保证了数据不能被他人读取,但通信的双方怎样校验对方的身份呢?HTTPS使用了数字证书,数字证书就是身份认证机构(Certificate Authority)盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名),这一行为表示身份认证机构已认定这个人。证书的合法性可以向CA验证。
CA证书(身份证) 证明自己是自己的一个证书
CA认证机构(公安局系统)
数字证书主要包含以下信息:
- 证书颁发机构
- 证书颁发机构签名
- 证书绑定的服务器域名
- 证书版本、有效期
- 签名使用的加密算法(非对称算法,如RSA)
- 公钥
客户端收到服务器的响应后,先向CA机构验证证书的合法性(根据证书的签名、绑定的域名等信息),如果校验不通过,浏览器会中止连接,向用户提示证书不安全。
证书的制作方法是公开的,任何人都可以自己制作证书,但不向CA申请,即得不到CA认证,所以访问某些网站时,浏览器会有证书不合法的提示。
(3)数据的完整性
网络传输过程中需要经过很多中间节点,虽然数据无法被解密,但可能被篡改,那如何校验数据的完整性呢?通过校验数字签名,流程见下图:
数字签名校验
首先来了解下哈希算法,哈希算法能够将任意长度的字符串转化为固定长度的字符串,该过程不可逆,可用来作数据完整性校验。
服务器在发送报文之前做了3件的事:
- 用哈希算法对报文提取定长摘要
- 用私钥对摘要进行加密,作为数字签名
- 将数字签名附加到报文末尾发送给客户端
客户端接收到报文后:
- 用公钥对服务器的数字签名进行解密
- 用同样的算法重新计算出报文的数字签名
- 比较解密后的签名与自己计算的签名是否一致,如果不一致,说明数据被篡改过。
同样,客户端发送数据时,通过公钥加密报文摘要,服务器用私钥解密,用同样的方法校验数据的完整性。
2.4 HTTPS通信的大致过程
HTTPS通信过程
客户端将自己支持的加密算法发送给服务器,请求服务器证书;
服务器选取一组加密算法,并将证书返回给客户端;
客户端校验证书合法性,生成随机对称密钥,用公钥加密后发送给服务器;
服务器用私钥解密出对称密钥,返回一个响应,HTTPS连接建立完成;
随后双方通过这个对称密钥进行安全的数据通信。
2、原理
三、Charles优点
(1)跨平台:Windows、Mac、Linux
(2)半免费:免费版有限制,延时和运行时间
(3)Charles支持按照域名和接口查看报文,简洁明了
(4)支持反向代理
(5)网络限速可选择网络类型(3G、4G、10M等)简便,fidder需要填写对应网络的上传和下载的速率
(6)可以解析AMF协议—>一般用不到