1. 程式人生 > >android7.0證書校驗問題

android7.0證書校驗問題

安卓7.0系統之後,系統不再信任使用者匯入的證書,並且自己專案裡面的自簽名證書也會不受信任。這樣就導致,第一:抓包軟體可能抓不到https的請求,第二:如果你的證書不是ca的證書,是自簽名的證書,將無法請求伺服器。

解決方式:

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

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