如何使用Charles抓取HTTPS
前言:
app测试,有时需要了解客户端和服务器之间的http或https的通信,这个时候就需要一些工具的辅助了,业界比较通用的,window系统下有Fidder和Charles;Fidder并不支持mac系统,所以mac系统直接用Charles。
在使用Charles的时候,会遇到一个抓取不到https数据的情况,相信很多人都遇到过这个问题,然后上网查询了一些配置,知道了如何配置,但是实际上为什么这么配置,也许还不太清楚,这也是我为什么写这篇文章的原因,也解决刚入职的时候新人日报中遗留的问题。
一.Charles简介
1.官网的解释:Charles是一个可以让开发者查看所用的机器(手机/web浏览器)和互联网之间所有http和ssl/https的通信,包含请求,响应,和(包括了cookies和缓存信息)的http headers的web代理调试工具。
2.最主要的功能
1)截取http和https请求和响应
2)断点:拦截请求和响应,进行修改或者拒绝,使服务端或客户端拿到编辑过的请求或响应
3)支持模拟网络带宽和进行网络延迟
二.使用到这个工具,那么肯定需要进行安装,以下是安装步骤:
1.下载安装
官网地址:http://www.charlesproxy.com是一个dmg后缀的文件,安装方式跟其他软件一样,拖到application文件。
下面是从官网截过来的图(最新版本看官网公布),也会提示需要的java版本
2.这里主要是介绍app,所以就着重讲解关于手机设备的配置,浏览器的以后有机会再增加。
1)Charles的配置:这是要打开代理功能,如以下步骤,在Proxy Settings中填好端口(8888),并且勾选上“Enable transparent HTTP proxying”
2)获取运行Charles的电脑的IP地址,可以在命令行中运行ifconfig en0或者直接查看网络配置
3)配置手机设备网络,需要Charles和设备都处于一个Wi-Fi环境,设置好代理
4)启动手机设备中想要进行抓取请求的app,这时在Charles中弹出手机设备的请求连接确认,点击“allow”即可。当然不小心点击到”Deny“也没关系,重启Charles之后,会再次弹出此确认请求。
连接了代理,上网也许会遇到一些弹窗提示说无法验证服务器,是否要继续,这里点击继续就能正常访问了(如图),如果点击取消,那么就会停止请求,也就不会有数据展示了。
3.以上部分只能截取到http协议的数据,如果需要截取https协议的数据,则还需要进行另外的配置,如无,会出现乱码的情况,后面会解释为什么需要这样子配置。
1)手机设备中安装Charles的CA证书,在设置好Charles代理之后,在手机浏览器中访问http://charlesproxy.com/getssl,安装好证书。
2)Charles设置:在SSL
Proxying Settings中勾选上Enable SSL Proxying,并且加上访问app的域名和端口。
4.为什么需要安装Charles的CA证书呢?
1)先理清一些概念的东西:
a)简单来说,https是http的安全版本,超文本传输协议http是以明文发送数据,而https是具有安全性的ssl加密传输协议,可以这么认为https=http+ssl。
b)采用https的服务器必须从CA申请一个用于证明服务器用途类型的证书,证书是唯一性,只用于对应的服务器。客户端要认可这个服务器是否是安全的,可以进行访问或者交易等操作,则需要进行对服务端的验证。
下图是客户端对服务器的验证过程:
c)ssl证书,遵循了ssl协议,在客户端和服务器之间建立了一条ssl安全通道,一般ssl证书都是在验证服务器身份后颁发给客户端。
d)由于ssl技术已建立在所有主要的浏览器和web服务器程序中,因此,仅需安装服务器证书就可以激活ssl协议,所以客户端通过信任该证书,就相当于信任了该主机(服务器)。
下图是客户端和服务端加密通讯的流程:
2)通过以上一个简单的理顺之后,这也就为什么当我们在使用Charles进行抓包的时候需要安装证书,可以通过ssl数字证书中的私用密钥来解译加密的信息,展示在Charles中,但是Charles有一个特殊的地方,就是实际上客户端安装的是Charles的CA证书,然后Charles安装服务器的CA证书,实际上流程还是一样的。
三.Charles曾经遇到的问题
1.iPhone机型安装好证书之后,抓包还是遇到了有问题,header中failure字段提示:No request was made. Possibly the SSL certificate was rejected. Note字段提示:You mayneed to configure your browser or application to trust the Charles RootCertificate. See SSL Proxying in the Help menu.
答案:在通用-关于手机-证书信任设置中把证书信任即可,有些手机则是进入通用-描述文件与设备管理中把证书信任
2.有遇到过手机开启代理,然后手机都没有网络,这时可能需要重装证书。
四.资料来源:
1.参考https百度百科
2.参考ssl百度百科
3.参考Charles官网信息
4.以及其他博客