android7.0证书校验问题

安卓7.0系统之后,系统不再信任用户导入的证书,并且自己项目里面的自签名证书也会不受信任。这样就导致,第一:抓包软件可能抓不到https的请求,第二:如果你的证书不是ca的证书,是自签名的证书,将无法请求服务器。

在谷歌开发者文档上面可以看到解决方案https://developer.android.google.cn/training/articles/security-config。这篇文章只是对这个文档的一个总结。详细的内容请看上面的链接。

解决方式:

1.在项目目录main/res/xml下新建network-security-config.xml文件

2.在AndroidManifest.xml文件下的application节点添加

android:networkSecurityConfig="@xml/network_security_config"

 



   
        域名
       
           
       

   

思考一:上面配置会让线上的包也会被抓到,如果我只想抓测试环境的包和debug下正式环境的包该如何改进这个配置?

解答一:通过配置多个dmain 的字段。把测试环境的域名加上,过滤正式环境的域名。这样达到只抓取测试服务器的域名了。如果你想在debug下抓正式环境的数据,那么在domain-config下添加 节点,然后再这个节点下添加正式环境的域名。这样正式环境就只在debug下才能被抓取了。
   
       
            正式环境域名
       

        测试环境域名
       
           
       

   

思考二:但是有些公司测试环境,正式环境连得域名是一样的,只是dns做了转发,这类情况如何解决;

解答二:这里提供一个思路,通过在gradle配置里面设置一个boolean值来区分测试包还是正式包,如果是测试包,那么添加这个net_config的配置,否则正式包不配置。

思考三:大部分公司环境有多套:test,dev,uat等,那么一个个环境一起加总感觉麻烦,有没有方便的解决方式

解答三:比如你的环境有如下域名 test.csdn.com,dev.csdn.com,uat.csdn.com, 那么 你只要添加csdn.com就能把这三个域名都包含进来。注意includeSubdomains必须为true才是模糊匹配,否则是精确匹配。

结语:有啥其他问题请留言

你可能感兴趣的:(android)