我试图连接到在Android Studio中使用自签名证书的网站。我收到提示接受Android Studio中的自签名证书Java代码
java.security.cert.CertPathValidatorException:信任锚 证书路径没有找到
的,我称之为openStream()
的URL对象。
由于我的代码位于测试环境中,因此我正在寻找解决方案来完全禁用证书检查或明确允许证书。
昨天我花了几个小时寻找解决方案,但每个指南都有几年的历史,并使用折旧的HTTP库。
我试图连接到在Android Studio中使用自签名证书的网站。我收到提示接受Android Studio中的自签名证书Java代码
java.security.cert.CertPathValidatorException:信任锚 证书路径没有找到
的,我称之为openStream()
的URL对象。
由于我的代码位于测试环境中,因此我正在寻找解决方案来完全禁用证书检查或明确允许证书。
昨天我花了几个小时寻找解决方案,但每个指南都有几年的历史,并使用折旧的HTTP库。
如果您的minSdkVersion
为24或更高,或者您只需要在此类设备上执行此测试,则可以通过network security configuration配置您的自签名证书。
如果您的minSdkVersion
为17或更高,可以使用my backport of network security configuration,最好使用OkHttp。
或者,还有其他using self-signed certificates with OkHttp的食谱。
除了@CommonsWare的回答,如果您的目标是API 14(ISC)或更高版本,您可以选择在应用程序之外的设备上安装额外的可信证书。说明可以找到here。
使用此方法安装的证书由设备上的所有应用程序使用。
在API 14-23上,默认情况下用户安装的证书是可信的。然而,在API 24(Nougat)上,用户添加证书的处理已更改,并且默认情况下不受信任。为了使用户值得信赖定义证书,下面的代码添加到network config:
<network-security-config>
<base-config>
<trust-anchors>
<!-- Trust preinstalled CAs -->
<certificates src="system" />
<!-- Additionally trust user added CAs -->
<certificates src="user" />
</trust-anchors>
</base-config>
</network-security-config>
更多信息有关与办证的牛轧糖的变化可以发现here。
没有建议的修复程序似乎为我工作。我的问题是模拟器本身阻止了证书吗?我找不到在Nexus 5仿真器中添加证书的方法。 – Keifer
@Keifer,那么我建议你在问题中添加更多信息:emuletor类型,操作系统版本,你尝试过的和失败的 – Vasiliy