使用 Charles 代理时 Android 11 SSL 握手失败

1 android charles-proxy

自更新到 11 以来,无法在 Android 设备上使用 Charles Proxy。我已阅读配置 CA 进行调试页面,并验证我正在测试的应用程序是否已按照其说明进行设置。对于运行相同应用程序的 iOS 来说这不是问题。看来只是安卓的问题。

在 Android 上通过 Charles 进行代理时,我可以访问互联网,这对我来说意味着连接良好,但当我使用该应用程序时,事情就开始失败。

我主要想知道是否还有其他人遇到这个问题?如果我能总结出我的经验,我就有希望利用这个理由来解决这个问题。

Ngh*_*ran 8

从 Android 11 或更高版本开始,有新的配置可以使 Charles Proxy 正常工作:

  1. 验证您是否安装并信任 Charles 代理证书。您可以在“设置”应用程序 ->“安全”->“加密和凭据”->“受信任的凭据”->“用户选项卡”=>“确保 Charles 代理”已加载中进行验证。

  2. 您只能从您自己的应用程序拦截 SSL 代理,而不能从其他应用程序拦截。

  3. 在源代码中,添加 res/xml/network_security_config.xml

<network-security-config>
    <debug-overrides>
        <trust-anchors>
            <!-- Trust user added CAs while debuggable only -->
            <certificates src="user" />
            <certificates src="system" />
        </trust-anchors>
    </debug-overrides>
    
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>

    <domain-config>
        <!-- Make sure your URL Server here -->
        <domain includeSubdomains="true">your_production_domain</domain>
        <trust-anchors>
            <certificates src="user"/>
            <certificates src="system"/>
        </trust-anchors>
    </domain-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)

=> 将 your_product_domain 替换为您的工作域。

  1. 添加到AndroidManifest.xml
<manifest>
    <application android:networkSecurityConfig="@xml/network_security_config">
    </application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

阅读更多内容https://docs.proxyman.io/debug-devices/android-device