使用Charles进行https抓包

背景

随着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包给抓到和解码出来。

使用

  1. 首先要安装Charles的证书,用iOS设备的safari打开http://www.charlesproxy.com/getssl,会弹出一个提示框让你安装证书,确认安装即可(只适用于真机,不适用于模拟器)
  2. 打开菜单Proxy -> SSL Proxying Settings...,在弹出的设置框中,勾选Enable SSL Proxying,同时添加需要代理的域名(这里偷懒,直接设置成了*来代理全部https域名)


    使用Charles进行https抓包_第1张图片
    SSL Proxying设置
  3. 开始愉快的抓包分析吧


    使用Charles进行https抓包_第2张图片
    �百度首页抓包

注意事项

  • 没有安装Charles的证书,却开启了Enable SSL Proxying,那么会造成所有的https访问都会失败,同时Charles会在每个https请求的overview那里友好的提示你需要信任Charles的根证书,即是我们上述的步骤1,以访问https://www.baidu.com为例
    使用Charles进行https抓包_第3张图片
    �没有安装Charles根证书
  • 如果不开启Enable SSL Proxying,那么Charles只是简单把所有SSL通信转发给server而不做任何处理,此时我们抓包会看到这个https请求,但是看不到请求的内容;另外这个请求会以CONNECT而非GET的形式出现,同时请求耗时还会异常的长(甚至有的请求会一直不结束),实际上这个请求早就返回了,知道这点就好,以免发生疑惑(Charles在每个请求的overview里还会有温馨提示)


    使用Charles进行https抓包_第4张图片
    �正常的https请求
  • 系统设置的通用->描述文件这里可以看到我们安装并信任的Charles的根证书,如果不需要了可以自行删除

你可能感兴趣的:(使用Charles进行https抓包)