Android7给证书的处理方式(http://android-developers.blogspot.com/2016/07/changes-to-trusted-certificate.html)带来了一些变化,不知怎么的,我再也不能让我的Charles工作了。
我的network_security_config.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安装了一个Settings -> Security -> Install from storage证书。证书显示在User Credentials中,而不是在Trusted credentials -> User中。在我的棒棒糖设备上,证书列在那里。
我使用okhttp3作为HTTP库。
知道我做错了什么吗?
发布于 2016-08-30 01:31:16
基于OP注释的故障排除线程,答案是只安装代理的CA证书作为受信任的,而不是它的cert +私钥。
造成这一问题的因素有两个:
Settings -> Security -> Install from storage流的行为也会发生变化。这种行为的变化掩盖了上述问题。在努格特之前,除了证书之外,包含私钥的文件的Settings -> Security -> Install from storage流错误地将证书安装为可信的服务器身份验证(例如,HTTPS、TLS,从而使MiTM成功),此外还可以正确安装用于将此Android设备身份验证到服务器的客户端证书。在Nougat中,错误被修复,这些证书不再作为可信的服务器身份验证安装。这可以防止客户端身份验证凭据影响(削弱)到服务器连接的安全性。在您的场景中,这会阻止MiTM的成功。
更复杂的是,Settings -> Security -> Install from storage没有为用户提供一种明确的方式来指定他们是在安装客户端身份验证凭证(私钥+证书链)还是服务器身份验证信任锚(只是CA证书--不需要私钥)。因此,Settings -> Security -> Install from storage流通过假设如果指定了私钥,那么它必须是客户/用户身份验证凭据还是服务器身份验证信任锚,从而猜测它是在处理客户/用户身份验证凭据。在您的情况下,它错误地假定您安装的是客户端/用户身份验证凭据,而不是服务器身份验证信任锚。
关于您的网络安全Config,您可能应该将应用程序配置为在调试模式下也信任"system“信任锚(调试-重写部分)。否则,应用程序的调试构建将无法工作,除非连接是由代理MiTM完成的,该代理的CA证书在Android设备上安装为可信的。
发布于 2016-08-30 12:43:37
解决方案是不使用.p12,只需使用Chrome (在wifi上配置了代理)导航到http://charlesproxy.com/getssl和安装下载的.pem文件。
我在运行Android7.0的Nexus5X上也遇到了同样的问题。以前有从Charles3.11.5导出的.p12 (帮助->SSL代理->导出Charles根证书和私钥)。当我试图从电话(设置->安全->从存储中安装)安装.p12时,它只出现在“用户凭据”下,从未出现在“可信凭据”下,当然,带有Charles的SSL也不起作用。
用于Android7.0的总“如何操作”应该是这样的:
android:networkSecurityConfig="@xml/network_security_config"放在Manifest.xml处的<application>中P.S.检查设备上的日期/时间。应该是对的。
发布于 2020-09-05 23:26:52
对我来说,SSL代理在release构建变体中不起作用。在debug工作过。
https://stackoverflow.com/questions/39215229
复制相似问题