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"

 

<?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纔是模糊匹配,否則是精確匹配。

結語:有啥其他問題請留言

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章