使用抓包工具检查自己的APP是否可以被中间人攻击

182 阅读2分钟

一、使用Charles

我们使用Charles可以完成网络抓包和更改请求/响应数据,具体的使用方法在这篇博客 Charles 如何抓取https数据包

  1. 按照上面博客安装Charles之后,下载Charles的根证书到MAC电脑安装并设置为信任。
  2. 按照提示给手机设置网络代理并在手机上安装好Charles的证书(注意如果chls.pro/ssl无法下载证书,可以到备用地址下载charlesproxy.com/getssl),并设置信任。
  3. 配置SSL Proxy Settings, 添加需要访问的https的域名。
  4. 以上设置正确后我们在手机APP上的网络请求就可以抓到了。

Charles抓包原理

Charles抓包原理.png

二、根据域名是否配置SSL Proxy Settings时抓包的差异判断是否实现了证书验证

配置SSL Proxy Settings里面可以对Host勾选和取消勾选并点击OK SSL代理设置.png 在取消勾选的情况下(或者未给自己的域名设置SSL Proxy Settings),因为HTTPS的安全链接,所以请求数据跟响应数据都是乱码的。

以下是对域名配置了SSL Proxy Settings的抓包情况

1. 如果是APP里面使用了证书验证的请求方式(包含使用证书里公钥比对的情况)

在勾选了SSL Proxy Settings的host时, request数据为红叉,也就是抓包失败,如图: 使用了证书验证的请求.png

2.如果是APP里面没有使用证书验证的情况下

数据是可以被抓包的,可以看到报文内部数据加了密,这个是在请求时通信数据内部加了密,不是https加的密;可以想象,如果通信的报文内部没有这层加密(一般是没有的),那么这些数据就暴露无遗了,如图:

未使用证书验证的请求.png

所以APP即使使用的是https,如果APP在建立通信时代码里没有使用证书验证的请求方式也是不安全的!

三、https 证书验证的请求方式在iOS端如何实现

查看我另一篇博客AFNetworking里面的HTTPS安全策略实现原理

相关阅读 iOS中HTTPS的安全连接问题