Technology · 2016 年 10 月 21 日 0

[Charles]抓取手机 HTTPS 明文数据包

文/hrscy(简书作者)
原文链接:http://www.jianshu.com/p/235bc6c3ca77
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

iOS App默认的UA格式:App名/版本号 CFNetwork/版本号 Darwin/版本号”.

出现 -1012 表示『用户取消了验证过程』,之所以会有这个错误。是知乎 App 使用的第三方库 AFNetworking 在 1.3.3 版本增加了 SSL Pinning 特性,实现中当开发者没有开启 SSL Pinning 同时服务端证书校验又失败时会直接调用:cancelAuthenticationChallenge: 方法,导致 HTTPClient 给出 -1012 错误。知乎 App 在代码中并没有处理这种情况,所以将错误直接弹了出来。

为什么会出现证书校验失败呢?有两种情况:

1. 当时知乎的服务端的 SSL 证书信任链的配置存在问题,会导致一些客户端中校验失败(问题已修正)。但我们找了多个系统版本不同型号的 iOS 设备做了测试,一直没能重现截图中现象;

2. 另一种情况是存在中间人攻击,用户收到了不是知乎颁发的证书。对此我们拜托一名反复出现该问题的用户协助排查。当用 Mobile Safari 访问 https://api.zhihu.com/missing_redirect_uri 时(注意 是 https),确实出现了『此服务器证书不受信任』的提示。但该用户手快点击了『继续』,由于 iOS 7 中手工接受信任证书是不可逆的操作,所以我们也没办法通过该用户确认该证书的详情。我们正在积极联系其他几名反馈的用户,希望能够拿到证书内容的截图。所以,还是请新遇到该现象的用户直接私信我,我和您详细的沟通解决的步骤。

我使用的 Charles 版本是 3.11.2,获取下载地址可自行百度,我下面要说的是使用 Charles 获取 https 的数据。

1. 配置 Charles 根证书

首先打开 Charles:[Charles 启动界面]

然后如下图操作:

 

之后会弹出钥匙串,如果不弹出,请自行打开钥匙串,如下图:

系统默认是不信任 Charles 的证书的,此时对证书右键,在弹出的下拉菜单中选择『显示简介』,点击使用此证书时,把使用系统默认改为始终信任,如下图:

 

然后关闭,就会发现 charles 的证书已经被信任了,如下图:

2. 在移动设备上配置证书

如下图,选择在移动设备上安装 Charles 根证书:

会弹出一个提示框,如下图:

进入手机设置界面:

然后打开手机的浏览器,输入
charlesproxy.com/getssl 会弹出如下界面:

点击安装即可,如果出现的不是这个界面,那么把链接换成
https://www.charlesproxy.com/documentation/additional/legacy-ssl-proxying/,点击安装 itself 后面的 here 就可以了。

这里以简书为例…,

此时还是获取不到 https 的数据,各位童鞋不要着急,下面还有操作,接着还是进入 Charles ,如下图操作:

如下图,勾选Enable SSL Proxying,点击添加,弹出下面的对话框,Host 表示你要抓取的 ip 地址或是链接,Port 填写 443 即可:

设置完成后,就可以抓取数据啦,如下图: