Windows下Charles对安卓Https Connect请求的抓取

https的了解:https://www.jianshu.com/p/870451cb4eb0

chales对https抓包的原理:https://www.jianshu.com/p/405f9d76f8c4

只用看对应的部分,觉得还是写的挺详细的

如果不做任何配置抓取https肯定是会失败的,默认的配置只能够抓取http

配置

  1. 电脑端安装证书 help->ssl proxying->install charles root certificate 确保安装后添加了信任
  2. 手机端连接和pc同一局域网的wifi,wifi配置代理为pc端的本地地址,端口地址为8888(默认,可在proxying setting中修改)
  3. 手机端连接后,原生浏览器查看help->ssl proxying->XXXbrowse to http://xxx的地址,下载并安装证书,添加信任
  4. ssl proxying设置https信赖的host地址

完成后对大部分的https都基本能够正常的抓取

错误及处理

SSLHandshake: Received fatal alert: certificate_unknown
You may need to configure your browser or application to trust the Charles Root Certificate. See SSL Proxying in the Help menu.

提示我们的证书认证失败,可是我们之前不是都安装证书并且添加信任了吗,为什么会这样呢,原来在Android 7.0(API 24 ) ,有一个名为“Network Security Configuration”的新安全功能。这个新功能的目标是允许开发人员在不修改应用程序代码的情况下自定义他们的网络安全设置。如果应用程序的SDK高于或等于24,则只有系统证书才会被信任。所以用户导入的Charles根证书是不被信任的。知道原因后,就可以找解决办法了

  1. 重新打包apk,反编译目标apk,强行修改gradle配置中targetsdk的version为小于24后打包运行
  2. 最方便的就是直接使用一个版本小于7.0的手机来进行抓包

另外这里有一点要说一下,并不是所有的app我们都能这样抓包,

  1. 是客户端通过指定的方式来只信任某一个证书,这样我们中间人返回的信息证书认证就会失败
  2. 通常只有客户端验证服务端公钥证书是不是合法,但是有些app采用的是双向验证,在通信过程中,服务器会验证app的公钥证书,这时候,就没办法使用中间人攻击的方式(Charles)抓包了

你可能感兴趣的:(Windows下Charles对安卓Https Connect请求的抓取)