Charles抓包https接口指南
Charles抓包https接口
作为一名iOS攻城狮,如果你没有听说过青花瓷这款软件,我只能说你还是回家洗洗睡吧。
最近在写一个需求,服务端不知道怎么设计接口。我只好找来了一个又类似功能的app,想要一睹芳容。于是主角Charles软件开始登场,当我按照操作设置完成开始抓取数据的时候,结果却一无所获。这个拦路虎就是https了,以前曾经研究过https的抓包,于是就按照记忆中的操作设置一遍,结果仍是一无所获。后来换了一台9.3.2系统的测试机,竟然抓取到了数据(PS:最初使用的是10.3.2系统手机)。真是百思不得其姐,经过不断的尝试,终于发现了原因所在。
好久没写东西了,废话多了点。言归正传,直接上干活
1.Charles抓取http接口数据
这个资料网上一大堆,此处不再赘述。本着认真负责的态度我还是到网上找了一篇图文并茂的文章供大家参考iOS使用Charles(青花瓷)抓包并篡改返回数据图文详解
值得一提的是,这篇文章中讲解的使用Charles修改返回数据,在调式过程中还是很有用的,感兴趣的可以看一下
2.Charles抓取https接口数据
概括来说https抓包只需要两步(PS:忽略了设置代理信息等步骤)
安装相关证书
配置环境
2.1安装相关证书
此处网上能够搜到的资源大多事给你提供了一个证书下载地址,根据我的操作,这是没有必要的。安装证书只需要一下几步:
2.1.1.安装电脑证书
安装电脑证书
注意要在钥匙串中找到对应的证书,设置信任
2.1.2.请求手机证书
Help-->SSL Proxying
Charles 3.10.2 版本界面
Charles 4.1.2 版本界面
在相关的手机中打开Safari软件,输入图片中默认的地址,手机会自动跳转到证书下载界面,按照提示安装即可
2.2配置相关环境
1.SSL Proxying Settings
2.设置可用状态以及抓取端口信息
3.添加端口
终于大功告成了,赶紧去试一下吧。什么10.0系统抓不到?好吧,忘记给大家划重点了,经过换了三个版本的Charles,无数次的尝试,我终于得出了结论:这个和Charles没有任何关系。。。。
那么究竟是什么原因那,重点来了:
粗心的你真的以为,你以为的就是你以为的么。。。
重点 :请看大屏幕
证书安装界面
你可曾注意到方框中的信息,就算注意到你可曾想过什么。
接下来到了解密的时候了:
iOS9.0 系统相关界面
iOS10.0 系统相关界面
不错谜底就在这里,iOS10安装证书描述文件以后,需要手动设置信任证书
iOS10.0 手动设置证书信任
终于大功告成,来看一下效果吧。
iOS10 抓取京东 https 接口信息
原理简析
如果是HTTP请求,因为数据本身并没加密所以请求内容和返回结果是直接展现出来的。
但HTTPS是对数据进行了加密处理的,如果不做任何应对是无法获取其中内容。所以Charles做的就是对客户端把自己伪装成服务器,对服务器把自己伪装成客户端:
Charles拦截客户端的请求,伪装成客户端向服务器进行请求
服务器向“客户端”(实际上是Charles)返回服务器的CA证书
Charles拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端。(这一步,Charles拿到了服务器证书的公钥)
客户端接收到“服务器”(实际上是Charles)的证书后,生成一个对称密钥,用Charles的公钥加密,发送给“服务器”(Charles)
Charles拦截客户端的响应,用自己的私钥解密对称密钥,然后用服务器证书公钥加密,发送给服务器。(这一步,Charles拿到了对称密钥)
服务器用自己的私钥解密对称密钥,向“客户端”(Charles)发送响应
Charles拦截服务器的响应,替换成自己的证书后发送给客户端
当然,如果用户不选择信任安装Charles的CA证书,Charles也无法获取请求内容。还有一种,如果客户端内置了本身的CA证书,这时如果Charles把自己的证书发送给客户端,客户端会发现与程序内的证书不一致,不予通过,此时Charles也是无法获取信息的。