mbo*_*nin 93 ssl android android-7.0-nougat
Android 7引入了对证书处理方式的一些更改(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>
Run Code Online (Sandbox Code Playgroud)
我正在调试模式下运行.但不管怎样,我明白了javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
.
不用说,我确实安装了pfx
证书Settings -> Security -> Install from storage
.证书显示在User Credentials
但不在Trusted credentials -> User
.在我的棒棒糖设备上,证书列在那里.
我正在使用okhttp3作为HTTP库.
知道我做错了什么吗?
Ale*_*sov 107
解决方案是不使用.p12,只需使用Chrome(在wifi上配置代理)导航到http://charlesproxy.com/getssl并安装下载的.pem文件.
我在运行Android 7.0的Nexus 5X上遇到了完全相同的问题.以前从Charles 3.11.5(帮助 - > SSL代理 - >导出查尔斯根证书和私钥)导出.p12.当我尝试从手机安装.p12(设置 - >安全 - >从存储安装)时,它只出现在"用户凭据"下,而不是"受信任的凭据",当然SSL与Charles代理不起作用.
Android 7.0的总计"操作方法"如下:
android:networkSecurityConfig="@xml/network_security_config"
以<application>
在的Manifest.xmlPS检查设备上的日期/时间.应该是正确的.
Ale*_*bin 25
基于OP的注释的故障排除线程,答案是仅将代理的CA证书安装为受信任的,而不是其cert +私钥.
这个问题是由两个因素造成的:
不仅安装MiTM代理的CA证书,还安装其私钥(从而使设备上的VPN应用程序能够解密来自其他应用程序的/ MiTM网络流量).您不需要设备上的MiTM代理私钥.
Settings -> Security -> Install from storage
除了cert(s)之外,Android Nougat还改变了包含私钥的文件的流行为.这种行为的改变揭示了上述问题.
在Nougat之前,Settings -> Security -> Install from storage
包含私钥的文件流除了证书之外错误地将证书安装为可信赖的服务器身份验证(例如,HTTPS,TLS,从而使您的MiTM成功),此外还正确安装为用于的客户端证书将此Android设备验证到服务器.在Nougat中,错误已得到修复,并且这些证书不再作为服务器身份验证的可信任安装.这可以防止客户端身份验证凭据影响(弱化)与服务器的连接的安全性.在您的方案中,这会阻止您的MiTM成功.
使问题复杂化的是,Settings -> Security -> Install from storage
它没有为用户提供明确的方式来指定他们是在安装客户端身份验证凭据(私钥+证书链)还是服务器身份验证信任锚(只是CA证书 - 不需要私钥) .因此,Settings -> Security -> Install from storage
流程通过假设如果指定了私钥,它必须是客户端/用户身份验证凭据来猜测它是在处理客户端/用户身份验证凭据还是服务器身份验证信任锚.在您的情况下,它错误地假定您正在安装客户端/用户身份验证凭据而不是服务器身份验证信任锚.
PS关于您的Network Security Config,您应该将应用程序配置为在调试模式下信任"系统"信任锚(debug-overrides部分).否则,除非在Android设备上将CA证书安装为受信任的代理进行MiTM连接,否则应用程序的调试版本将无法运行.
归档时间: |
|
查看次数: |
41214 次 |
最近记录: |