Android7.0之前的版本,安装Charles提供的证书就可以实现抓https包
但是在Android 7.0以后,google推出更加严格的安全机制,这使得user域的证书不被信任。
如果是自己开发app的话,可以通过这个链接调整项目相关配置实现抓包,但是如果不是自己的app那就没啥好的方法了。

以下提供一种root之后抓包的方法。
其实原理很简单,就是把user域的证书放入到system域。

  1. 获取抓包软件证书,一般抓报软件提供https抓包功能的都会提供这个。charles可参考这个链接
  2. 通过openssl把证书转成适用的格式(crt转x509)

    # crt格式文件 xxx.crt
    openssl x509 -inform PEM -subject_hash_old -in xxx.crt | head -1
    # 得到类似字符串9a5ba575
    cat xxx.crt > 9a5ba575.0
    openssl x509 -inform PEM -text -in xxx.crt -out /dev/null >> 9a5ba575.0
  3. 9a5ba575.0(不一定叫这个名字,后缀一般是.0)放入/system/etc/security/cacerts(或者/system/ca-certificates/files/,不同系统版本可能不一样),可以通过adb进行操作,也可以通过一些文件管理器(比如mixplorer,root文件管理器)获取root权限后进行操作。具体可参考这个链接

备注:更简单一点的方法,首先安装用户证书,然后找到用户证书/data/misc/user/0/cacerts-added,然后放到/system/etc/security/cacerts 即可(re管理器挂载目录为可读写)

参考链接:

  1. https://blog.jeroenhd.nl/article/android-7-nougat-and-certificate-authorities
  2. https://cosmeapp.github.io/2017/09/26/install-charles-certificate-android/
  3. https://www.jianshu.com/p/f547b05a5335
  4. https://github.com/mitmproxy/mitmproxy/issues/2054