android8+ https 抓包
原文地址:https://codeleading.com/article/59692014729/#google_vignette
当把应用的targetSdkVersion设置成24或更大时,使用抓包工具(比如Charles)无法对https请求进行抓包,即使安装了Charles的证书。
当把应用的targetSdkVersion设置成28或更大时,应用发送http请求会报错:
Exception: IOException java.io.IOException: Cleartext HTTP traffic to * not permitted
现在我们应用的targetSdkVersion一般都会设置28或以上,那么这两个问题都会存在 。
如何解决呢?
一、设置允许http请求
在AndroidManifest.xml文件中给application配置属性
android:usesCleartextTraffic="true"
示例
<application android:name=".App" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:usesCleartextTraffic="true" android:theme="@style/AppTheme" >
加上这个属性后,就能发http请求了。
二、允许charles对https请求抓包
在AndroidManifest.xml文件中给application配置属性
android:networkSecurityConfig="@xml/network_security_config"
并且在res文件夹下创建xml文件夹,并添加network_security_config文件,文件内容如下:
<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="system" overridePins="true" />
            <certificates src="user" overridePins="true" />
        </trust-anchors>
    </base-config>
</network-security-config>
这个配置的作用是信任自签名ssl证书。
当你同时给application加上以上两个属性后,比如
<application android:name=".App" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:usesCleartextTraffic="true" android:networkSecurityConfig="@xml/network_security_config" android:theme="@style/AppTheme" >
你会发现,http请求还是发不出去,但是https抓包是可以的。因为配置android:networkSecurityConfig="@xml/network_security_config"这个属性后,android:usesCleartextTraffic="true"这个配置就会失效。原因可能是个bug吧。
如何让这两个配置都生效呢?
先去掉AndroidManifest.xml中android:usesCleartextTraffic="true"属性,然后在network_security_config文件中base-config标签加上属性cleartextTrafficPermitted="true"即可。
因此,要解决这两个问题,只需要给AndroidManifest.xml中的application标签配置属性android:networkSecurityConfig="@xml/network_security_config"
示例:
<application android:name=".App" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:networkSecurityConfig="@xml/network_security_config" android:theme="@style/AppTheme" >
network_security_config文件完整内容如下:
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" overridePins="true" />
            <certificates src="user" overridePins="true" />
        </trust-anchors>
    </base-config>
</network-security-config>
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号