背景
随着apple对https协议的强推(貌似2017年开始ios应用上架就得全部用https协议了),作为iOS开发来说,会越来越多的接触到这个协议,并不可避免的需要抓包来进行问题的定位解决。好在我们常用的Charles也支持https协议抓包,这就极大方便了我们。
原理
Charles能进行https协议抓包分析,是使用了中间人代理的方法(man-in-the-middle,也常作为一个黑客攻击手段)。Charles代替你的app接受server的证书,然后使用这个证书通过SSL和server通信;同时,Charles会动态的生成一个对应的证书(用Charles的CA证书签名),然后使用这个证书和你的app通信,这样就完成了一个中间人代理,从而可以把app和server的https包给抓到和解码出来。
使用
- 首先要安装Charles的证书,用iOS设备的safari打开http://www.charlesproxy.com/getssl,会弹出一个提示框让你安装证书,确认安装即可(只适用于真机,不适用于模拟器)
-
打开菜单Proxy -> SSL Proxying Settings...,在弹出的设置框中,勾选Enable SSL Proxying,同时添加需要代理的域名(这里偷懒,直接设置成了*来代理全部https域名)
-
开始愉快的抓包分析吧
注意事项
- 没有安装Charles的证书,却开启了Enable SSL Proxying,那么会造成所有的https访问都会失败,同时Charles会在每个https请求的overview那里友好的提示你需要信任Charles的根证书,即是我们上述的步骤1,以访问https://www.baidu.com为例
-
如果不开启Enable SSL Proxying,那么Charles只是简单把所有SSL通信转发给server而不做任何处理,此时我们抓包会看到这个https请求,但是看不到请求的内容;另外这个请求会以CONNECT而非GET的形式出现,同时请求耗时还会异常的长(甚至有的请求会一直不结束),实际上这个请求早就返回了,知道这点就好,以免发生疑惑(Charles在每个请求的overview里还会有温馨提示)
- 系统设置的通用->描述文件这里可以看到我们安装并信任的Charles的根证书,如果不需要了可以自行删除