连接到https会给出:SSLHandshakeException未找到认证路径的信任锚点

问题描述:

到目前为止,我连接到一个http服务器,该服务器返回一些数据。现在,该服务器已更改并且其https。现在,连接到新的URL我得到这个异常时:连接到https会给出:SSLHandshakeException未找到认证路径的信任锚点

javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 

在iOS系统中这个问题不存在,新的HTTPS URL正确返回数据,而无所作为,并用相同的旧代码与合作服务器的http版本。

有没有一种方法可以避免这个问题,而不需要像在iOS中那样对源代码进行修改?这只是我正在做的各种http connectiosn之一,并且正在我的应用程序中被迁移到https。

这是我的代码:

URLConnection connection; 
URL url = new URL(configUrl); 
connection = url.openConnection(); 
connection.setConnectTimeout(5000); 
connection.setReadTimeout(5000);     
int responseCode = ((HttpURLConnection)connection).getResponseCode(); 
+0

检查 - > http://*.com/a/21426948/4018207 – AndiGeeky

服务器使用的是由iOS的认可,而不是由Android公认的一些证书颁发机构。除了向服务器团队抱怨之外,您可以直接对此做些什么。

如果您的minSdkVersion为24或更高,您可以使用network security configuration向Android教授您的证书颁发机构。这不需要对Java代码进行任何更改,但需要设置一些资源并在清单中指向它们。

如果您minSdkVersion是17到23,可以使用my backport of network security configuration,尽管这将需要一些代码更改。

如果您的minSdkVersion低于17,您将需要或多或少地像使用自签名证书的服务器那样处理这种情况,然后推出您自己的TrustManager