当升级targetSdkVersion 到 28 后发现在 Android 7.0 以上机型不能抓包了。上网搜了一下有很多解决方案,但都有弊端,最后参考墙外的一篇文章找到了一个最优解决方案
方案一:
1.添加res/xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<certificates src="system"/>
<certificates src="user"/>
</base-config>
</network-security-config>
2.在AndroidManifest.xml中加入上面的配置
<application
android:networkSecurityConfig="@xml/network_security_config"
>
</application>
这样就可以抓包了,但是,这种方案和之前一样,所有人都可以抓取你家App的数据
方案二:
1.和方案1一样,添加res/xml/network_security_config.xml,但是里面的配置不一样
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<certificates src="system"/>
<certificates src="@raw/charles"/>
</base-config>
</network-security-config>
2.<certificates src="@raw/charles"/>是添加到raw文件夹下的charles或fiddler证书
获取方式:
charles:help--SSL Proxying--Save Charles Root Certificate
这种方案可以实现指定的证书能抓自家的app,但是也有缺陷。假如很多人要抓包,需要他们提供charles证书,而且要将证书打包到App中。更严重的是,假如电脑重新装系统了或换电脑了,那么就没有办法抓已经上线的App了
方案三:
1.和方案1、2一样,添加res/xml/network_security_config.xml,但是里面的配置不一样
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<certificatessrc="system"/>
<certificatessrc="user"/>
</trust-anchors>
</debug-overrides>
</network-security-config>
这种方式只有在android:debuggable为true时才生效。缺点很明显,包上线了之后就不能再被抓包了
终极方案:
1.和方案二一样,但是证书我们自己生成,这里使用openssl来生成,上命令:
$ openssl req -x509 -newkey rsa:1024 -keyout charles.key -out charles.crt -days 3650 -nodes
之后会让你输入一下国家、地区、邮箱等,自己能记住就行。最后会生成2个文件:
charles.crt和charles.key
2.但是,Charles软件需要的是PKCS12文件,我们需要将上面2个文件绑到一起,上命令:
$ openssl pkcs12 -export -out charles.pfx -inkey charles.key -in charles.crt
Enter Export Password: <YOUR KEY>
Verifying - Enter Export Password: <YOUR KEY>
上面输入的密码必须记住,之后给Charles替换我们自己的根证书的时候需要。
之后会生成一个文件:charles.pfx
3.用charles.pfx文件替换Charles软件的根证书
路径:Pxoxy--SSL Proxying Settings--Root Certificate--Choose
之后选择charles.pfx文件作为根证书,需要输入密码,就是上面我们创建时候填的密码。记得勾选记住密码,要不每次都得输。
4.最后,将charles.crt放到Android项目的raw文件夹下,并在network_security_config.xml中进行指定,和方案二一样
现在我们就可以愉快的抓包了,谁需要抓包,把charles.pfx和密码给他就行
具体如何自己生成证书,我是参考这篇文章,需要科学上网,有需要的自己去看:
http://codeblog.shape.dk/blog/2014/01/06/custom-ssl-certificate-with-charles-web-proxy/
希望能帮到你
网友评论