背景:
在进行App测试或定位线上问题时,经常会遇到抓取HTTPS数据包的需求。一般在windows上会使用fiddler,Mac上使用Charles。对于https请求,抓到的数据因为经过了加密,只能看到乱码。
本文介绍如何使用Charles来抓取https网络报文。操作步骤已在MAC + iphone5s上亲测。
操作原理
关键的操作思想:
1. 构造一个中间人代理,它有能力完成TLS/SSL握手
2. 弄到一个根证书,并用它生成签名认证的代理服务器证书
Charles就是一个理想的中间人,它支持SSL握手,可以自动根据根证书生成一个签名的服务器证书,并且它的官网为我们提供了一个根证书。
我们要做的就是在客户端安装好这个根证书,然后让我们的操作系统信任它。对App来说,需要设法在IOS或Android上装上这个官网提供的根证书。
完成上述步骤后,App再指定Charles为它的代理服务器,这时,App请求的服务器证书就是Charles自动生成的代理服务器证书。如果Charles的根证书已被信任,这个自动生成的代理服务器证书是有效的,使用它App和Charles的TLS握手可以顺利完成。
以下是详细的操作步骤:
分步指南
第一步:配置HTTP代理,这步与抓取HTTP请求是一样的:
图1
选择在8888端口上监听,然后确定。够选了SOCKS proxy,还能截获到浏览器的http访问请求。
图2
点add添加需要监视的域名,支持 *号通配符,端口一般都是443:
第二步:配置SSL代理:
首先在charles的 Proxy选项选择SSL Proxy Settings
第三步 为手机设置代理
在手机无线中配置手动代理,输入安装Charles的电脑的网络地址,端口填8888。
第四步 安装根证书
在手机上安装Charles的根证书:
以IOS为例,在Safri上打开Charles的根证书下载网址: chls.pro/ssl 。
顺利的话会出现这样的画面,继续点安装,一路点确定。然后去设置里的描述文件管理如果看到有绿色的勾勾就说明安装成功了。
接下来,在设置->通用->关于本机->证书信任设置 刚刚安装的证书的开关打开信任就可以抓加密包了。
图4
如果不能下载,检查手机是否正确设置了代理,Charles是否已经打开并配置正确。
电脑端的根证书安装
以MAC为例,直接在Charles的Help菜单中安装;安装完成后去系统的钥匙串访问中信任它。
图5
完成后:试试看抓一下数据,可以看到抓取到的报文如下:
图6
以上的步骤在随便一搜都可以找到的,但是,上面是针对ios和一部分android机子可行,android7.0的机子再去用charles抓包时候会出现一下情况:
看到这里,其实就只要一步,步骤:设置-->通用-->关于本机-->证书信任设置(iOS10及以上需要);