android7.0证书校验问题

针对安卓7.0系统后不再信任用户导入证书的问题,本文介绍了解决方案,包括在项目中配置network-security-config.xml文件,实现不同环境的证书信任控制,确保测试和正式环境的HTTPS请求正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安卓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"

 

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">域名</domain>
        <trust-anchors>
            <certificates src="user"/>
        </trust-anchors>
    </domain-config>
</network-security-config>

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

解答一:通过配置多个dmain 的字段。把测试环境的域名加上,过滤正式环境的域名。这样达到只抓取测试服务器的域名了。如果你想在debug下抓正式环境的数据,那么在domain-config下添加 <debug-overrides>节点,然后再这个节点下添加正式环境的域名。这样正式环境就只在debug下才能被抓取了。<network-security-config>
    <domain-config>
        <debug-overrides>
            <domain includeSubdomains="true">正式环境域名</domain>
        </debug-overrides>
        <domain includeSubdomains="false">测试环境域名</domain>
        <trust-anchors>
            <certificates src="user"/>
        </trust-anchors>
    </domain-config>
</network-security-config>

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值