一、使用Charles
我们使用Charles可以完成网络抓包和更改请求/响应数据,具体的使用方法在这篇博客 Charles 如何抓取https数据包
- 按照上面博客安装Charles之后,下载Charles的根证书到MAC电脑安装并设置为信任。
- 按照提示给手机设置网络代理并在手机上安装好Charles的证书(注意如果chls.pro/ssl无法下载证书,可以到备用地址下载charlesproxy.com/getssl),并设置信任。
- 配置SSL Proxy Settings, 添加需要访问的https的域名。
- 以上设置正确后我们在手机APP上的网络请求就可以抓到了。
Charles抓包原理
二、根据域名是否配置SSL Proxy Settings时抓包的差异判断是否实现了证书验证
配置SSL Proxy Settings里面可以对Host勾选和取消勾选并点击OK
在取消勾选的情况下(或者未给自己的域名设置SSL Proxy Settings),因为HTTPS的安全链接,所以请求数据跟响应数据都是乱码的。
以下是对域名配置了SSL Proxy Settings的抓包情况
1. 如果是APP里面使用了证书验证的请求方式(包含使用证书里公钥比对的情况)
在勾选了SSL Proxy Settings的host时, request数据为红叉,也就是抓包失败,如图:
2.如果是APP里面没有使用证书验证的情况下
数据是可以被抓包的,可以看到报文内部数据加了密,这个是在请求时通信数据内部加了密,不是https加的密;可以想象,如果通信的报文内部没有这层加密(一般是没有的),那么这些数据就暴露无遗了,如图:
所以APP即使使用的是https,如果APP在建立通信时代码里没有使用证书验证的请求方式也是不安全的!
三、https 证书验证的请求方式在iOS端如何实现
查看我另一篇博客AFNetworking里面的HTTPS安全策略实现原理
相关阅读 iOS中HTTPS的安全连接问题