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

时间:2016-12-21 11:24:17

标签: android urlconnection sslhandshakeexception

到目前为止,我正在连接到一个返回一些数据的http服务器。现在,该服务器已更改,其https已更改。现在,当连接到新网址时,我得到了这个例外:

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

在iOS中,此问题不存在,并且新的https url正确地返回数据,而不执行任何操作,并使用与http版本服务器相同的旧代码。

有一种方法可以避免这个问题,而无需像在iOS中那样对源代码进行更改?这只是我正在做的各种http连接中的一种,并且正在我的应用上迁移到https。

这是我的代码:

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

1 个答案:

答案 0 :(得分:0)

您的服务器使用某些由iOS识别且Android无法识别的证书颁发机构。除了向服务器团队投诉外,你几乎无法直接做到这一点。

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

如果minSdkVersion为17到23,则可以使用my backport of network security configuration,但这需要更改一些代码。

如果您的minSdkVersion低于17,则需要使用自签名证书或多或少地将此情况视为服务器,并自行推送TrustManager