转:https://www.jianshu.com/p/a222a420ff35
1. 问题描述
换了了一个荣耀8测试机,按照charles的老套路去安装证书,准备抓https的包,发现死活不成功,charles报错如下:
You may need to configure your browser or application to trust the Charles Root Certificate.
2. 问题解决
查资料发现,这是Android 7.0的问题,在7.0上,用户自己安装的证书是不被app应用信任的(安全性考虑,防止charles这种做接口逆向,监听数据)
解决办法如下(只能抓你自己开发的app的https的包):
1. 在你自己的app下,xml目录下新建一个文件:res/xml/network_security_config.xml ,配置在debug模式下信任用户证书,内容如下:
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Trust user added CAs while debuggable only -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
2. 在AndroidManifest中使用它:
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config" ... >
...
</application>
</manifest>
好了,这样就ok了
如果觉得本文帮到了你,请留言、点赞,和关注,期待和你一起进步!
参考资料
http://blog.csdn.net/yinyignfenlei/article/details/72782898
https://www.charlesproxy.com/documentation/using-charles/ssl-certificates/
Android 7.0 之后抓包 unknown 和证书无效的解决方案(无需改代码)
转:https://blog.csdn.net/ShadowySpirits/article/details/79756274
二、将抓包软件的证书安装成系统证书(需ROOT)
系统证书目录:/system/etc/security/cacerts/
其中的每个证书的命名规则如下: <Certificate_Hash>.<Number>
文件名是一个Hash值,而后缀是一个数字。
文件名可以用下面的命令计算出来:
openssl x509 -subject_hash_old -in <Certificate_File>
后缀名的数字是为了防止文件名冲突的,比如如果两个证书算出的Hash值是一样的话,那么一个证书的后缀名数字可以设置成0,而另一个证书的后缀名数字可以设置成1
操作步骤:
将抓包软件的证书用上述命令计算出 Hash 值,将其改名并复制到系统证书目录
此时你应该可以在 设置->安全->加密与凭据->信任的凭据 的系统标签页看到你新加入的证书,将其启用即可顺利抓包
方式3:
1,一台root的手机
2,导出burp证书,push到sd安装—这一步就不介绍了,然后 cp /data/misc/user/0/cacerts-added/* /system/etc/security/cacerts/
此时你已经可以抓到非强证书校验的报文了