Android 7对证书的处理方式(http://android-developers.blogspot.com/2016/07/changes-to-trusted-certificate.html)进行了一些更改,但不知何故,我无法让Charles代理继续工作。
我的网络安全配置.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<debug-overrides>
<trust-anchors>
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
我在调试模式下运行,但无论如何,我得到javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
。
不用说,我确实从Settings -> Security -> Install from storage
安装了一个pfx
证书,证书显示在User Credentials
中,但没有显示在Trusted credentials -> User
中,在我的棒棒糖设备上,证书列在那里。
我使用okhttp3作为HTTP库。
你知道我做错了什么吗?
6条答案
按热度按时间ubby3x7f1#
解决方案是不要使用.p12,只需使用Chrome浏览器(在wifi上配置代理)导航到http://charlesproxy.com/getssl并安装下载的.pem文件。
我在运行Android 7. 0的Nexus 5X上也遇到了完全相同的问题。之前有从Charles 3. 11. 5导出的IdeP 12(帮助-〉SSL代理-〉导出Charles根证书和私钥).当我尝试从手机安装.p12(设置-〉安全-〉从存储安装)它只出现在“用户凭据”下,而从不出现在“可信凭据”下,当然,带有Charles代理的SSL不起作用。
Android 7.0的总体“操作方法”如下:
1.配置WiFi +代理(Charles需要它)。连接它。
1.在设备上,使用Chrome浏览器导航到http://charlesproxy.com/getssl,接受下载请求。pem,然后按“打开”,它会启动“证书安装程序”应用程序。使用它将证书安装为“VPN和应用程序”。
1.将属性
android:networkSecurityConfig="@xml/network_security_config"
放入Manifest.xml中的<application>
1.使用第一篇文章中的内容创建res/xml/network_security_config. xml(完全正确)。
1.启动查尔斯和应用程序,玩得开心。
P.S.检查设备上的日期/时间。它应该是正确的。
cu6pst1q2#
根据OP的故障排除注解线索,答案是只将代理的CA证书安装为受信任证书,而不是其证书+私钥。
该问题由两个因素引起:
1.不仅安装MiTM代理的CA证书,还安装其私钥(从而使设备上的VPN应用能够解密来自其他应用的MiTM网络流量)。您不需要设备上的MiTM代理私钥。
Settings -> Security -> Install from storage
流的行为,用于包含私钥和证书的文件。此行为更改揭示了上述问题。在Nougat之前,
Settings -> Security -> Install from storage
流用于包含私钥和证书的文件,错误地将证书安装为受信任的服务器身份验证(例如,HTTPS,TLS,从而使您的MiTM成功),除了作为客户端证书正确安装,用于向服务器验证此Android设备。这个错误被修正了,这些证书不再被安装为服务器认证的可信证书。2这可以防止客户端认证证书影响(削弱)服务器连接的安全性。3在你的场景中,这会阻止你的MiTM成功。使问题复杂化的是,
Settings -> Security -> Install from storage
没有为用户提供一种明确的方式来指定他们是否正在安装客户端身份验证凭据(私钥+证书链)或服务器身份验证信任锚(只是CA证书--不需要私钥)。结果,X1 M3 N1 X流通过假设,如果指定了私钥,它必须是客户端/用户身份验证凭据。在您的情况下,它错误地假定您正在安装客户端/用户身份验证凭据,而不是服务器身份验证信任锚。P.S.关于你的网络安全配置,你可能应该配置应用在调试模式下也信任“系统”信任锚(debug-overrides部分)。否则应用的调试版本将无法工作,除非连接由代理进行MiTM 'd,该代理的CA证书安装为Android设备上的受信任。
a5g8bdjr3#
我也有同样的错误,并尝试了各种方法,直到我读到以下消息,这是关键:“* 证书显示在用户凭据中,但未显示在受信任凭据中 *"。
所以问题是如何使证书出现在那里,这些是我遵循的步骤:
1.从http://chls.pro/ssl下载模拟器中的证书
1.安装证书和信任
1.验证您是否信任证书
1.开始拦截HTTPS通信
s1ag04yj4#
对我来说,SSL代理在
release
构建变体中不工作。在debug
中工作。jgwigjjp5#
在2023年
值得一提的是,您需要查尔斯证书文件安装在您的android手机,并存在于您的项目目录。
这就是我如何让查尔斯在Android 12上工作的。一个截图就很完美了。
res/raw/charlescert.pem
中。如果您无法在Android手机中下载它,请在计算机的浏览器中下载并上传到您的Android手机。网络安全配置. xml
如果我不添加
tools:ignore="NetworkSecurityConfig"
这一行,代码会抱怨,来自iOS开发...不确定原因。最后,在AndroidManifest.xml中添加
<application android:networkSecurityConfig="@xml/network_security_config"...>
7tofc5zh6#
我在Android 7.1.1,这里是我如何在我的设备上设置(OnePlus一)-没有清单的变化(我的目标API 21为我的应用程序):
在查尔斯代理:
Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser
。此步骤为您提供代理IP和端口号,以及下载Charles代理SSL的链接。在您的手机上:
Wifi Settings > Modify Network > Advanced Options
。将代理设置为Manual
,并将您从Charles收到的IP和端口号分别输入Proxy hostname
和Proxy port
。1.(可选)您可能无法访问Charles之前提供的chls.pro/ssl链接。在我的设备上,总是通知我没有网络连接。我将www.example.com添加charlesproxy.com到
Bypass proxy for
字段。1.在你的浏览器上,转到步骤3中的链接,下载所需的证书(如果它在Chrome浏览器上不起作用,请下载海豚Browser)。你可以用任何名称命名你的证书。
回到查尔斯代理:
1.如果您的设置默认为提示您进行远程连接,您应该得到提示
Allow
或Deny
您的手机使用代理。您现在可以在牛轧糖7.1.1上使用Charles。