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>

 

posted @ 2023-09-27 20:16  远洪  阅读(234)  评论(0)    收藏  举报