从 Android 11 或更高版本开始,有新的配置可以使 Charles Proxy 正常工作:
-
验证您是否安装并信任 Charles 代理证书。您可以在“设置”应用程序 ->“安全”->“加密和凭据”->“受信任的凭据”->“用户选项卡”=>“确保 Charles 代理”已加载中进行验证。
-
您只能
从您自己的应用程序
拦截 SSL 代理,而不能从其他应用程序拦截。
-
在源代码中,添加 res/xml/network_security_config.xml
<span style="background-color:var(--highlight-bg)"><span style="color:var(--highlight-color)"><code class="language-xml"><<span style="color:var(--highlight-namespace)">network-security-config</span>>
<<span style="color:var(--highlight-namespace)">debug-overrides</span>>
<<span style="color:var(--highlight-namespace)">trust-anchors</span>>
<span style="color:var(--highlight-comment)"><!-- Trust user added CAs while debuggable only --></span>
<<span style="color:var(--highlight-namespace)">certificates</span> <span style="color:var(--highlight-attribute)">src</span>=<span style="color:var(--highlight-variable)">"user"</span> />
<<span style="color:var(--highlight-namespace)">certificates</span> <span style="color:var(--highlight-attribute)">src</span>=<span style="color:var(--highlight-variable)">"system"</span> />
</<span style="color:var(--highlight-namespace)">trust-anchors</span>>
</<span style="color:var(--highlight-namespace)">debug-overrides</span>>
<<span style="color:var(--highlight-namespace)">base-config</span> <span style="color:var(--highlight-attribute)">cleartextTrafficPermitted</span>=<span style="color:var(--highlight-variable)">"true"</span>>
<<span style="color:var(--highlight-namespace)">trust-anchors</span>>
<<span style="color:var(--highlight-namespace)">certificates</span> <span style="color:var(--highlight-attribute)">src</span>=<span style="color:var(--highlight-variable)">"system"</span> />
</<span style="color:var(--highlight-namespace)">trust-anchors</span>>
</<span style="color:var(--highlight-namespace)">base-config</span>>
<<span style="color:var(--highlight-namespace)">domain-config</span>>
<span style="color:var(--highlight-comment)"><!-- Make sure your URL Server here --></span>
<<span style="color:var(--highlight-namespace)">domain</span> <span style="color:var(--highlight-attribute)">includeSubdomains</span>=<span style="color:var(--highlight-variable)">"true"</span>>your_production_domain</<span style="color:var(--highlight-namespace)">domain</span>>
<<span style="color:var(--highlight-namespace)">trust-anchors</span>>
<<span style="color:var(--highlight-namespace)">certificates</span> <span style="color:var(--highlight-attribute)">src</span>=<span style="color:var(--highlight-variable)">"user"</span>/>
<<span style="color:var(--highlight-namespace)">certificates</span> <span style="color:var(--highlight-attribute)">src</span>=<span style="color:var(--highlight-variable)">"system"</span>/>
</<span style="color:var(--highlight-namespace)">trust-anchors</span>>
</<span style="color:var(--highlight-namespace)">domain-config</span>>
</<span style="color:var(--highlight-namespace)">network-security-config</span>>
</code></span></span>
=> 将 your_product_domain 替换为您的工作域。
4. 添加到AndroidManifest.xml
<span style="background-color:var(--highlight-bg)"><span style="color:var(--highlight-color)"><code class="language-xml"><<span style="color:var(--highlight-namespace)">manifest</span>>
<<span style="color:var(--highlight-namespace)">application</span> <span style="color:var(--highlight-attribute)">android:networkSecurityConfig</span>=<span style="color:var(--highlight-variable)">"@xml/network_security_config"</span>>
</<span style="color:var(--highlight-namespace)">application</span>>
</<span style="color:var(--highlight-namespace)">manifest</span>>
</code></span></span>
证书安装时
手机进入设置 --> 进入Wifi设置 --> 选择Wifi网络设置(不同的机型可能需要长按进入)–>找到代理栏修改为手动 -->输入主机名(查看上面第三步) --> 端口号(及上面第二步提到的)保存后。完成上面的步骤后,你可能会看到很多网络请求都报unknown,如何只是要抓取http请求则可以忽略这些错误,如果要抓取的https请求还需要配置证书,下面及开始配置。
抓包
工具支持http和https代理,另外还支持流量控制如弱网测试,接口并发测试,重发网络请求测试,网络请求截获并动态修改等功能。
警告协议(Alert Protocol)是
SSL
/TLS协议栈的一部分,它用于在两个通信对等实体之间传输关于连接状态、错误或其他重要条件的通知。当加密会话中发生异常或错误时,一方可以通过发送一个警告消息来通知另一方。
如果你也遇到这个问题,就看看我的内容哦
Client
SSL
handshake failed: An unknown issue occurred processing the certificate (certificate_unknown)
客户端
SSL
握手
失败
:处理证书时出现未知问题(证书\未知)
You may need to configure your browser or a...
对比
握手
成功和
握手
失败
的协议报文,发现
握手
失败
报文 main, WRITE: TLSv1 Handshake, length = 163 main, READ: TLSv1.2 Alert, length = 2 main, RECV TLSv1 ALERT: fatal, handshake_failure 发现了问题,
客户端
发起了一个TLSv1
握手
,此时服务器端却发出了一个TLSv1.2Alert警告,拒绝
握手
连接。: 但是以上并没有解决我的问题,后来我是这样做的,可供参考。如有侵权,请联系删除。
请求服务端时使用的加密有差异,第二种加密方式无法正常
握手
成功,检查加密相关代码,发现未根据是否使用GM加密方式做判断导致的问题。由于同一份代码不同机器有的能调用成功,有的调用
失败
的前提下,网上给的解决方案无法解决(比如,配置环境等)。调用某功能云端接口请求,保存如下信息:Web服务通信期间
握手
期间远程主机关闭连接。