连接到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();
答
服务器使用的是由iOS的认可,而不是由Android公认的一些证书颁发机构。除了向服务器团队抱怨之外,您可以直接对此做些什么。
如果您的minSdkVersion
为24或更高,您可以使用network security configuration向Android教授您的证书颁发机构。这不需要对Java代码进行任何更改,但需要设置一些资源并在清单中指向它们。
如果您minSdkVersion
是17到23,可以使用my backport of network security configuration,尽管这将需要一些代码更改。
如果您的minSdkVersion
低于17,您将需要或多或少地像使用自签名证书的服务器那样处理这种情况,然后推出您自己的TrustManager
。
检查 - > http://stackoverflow.com/a/21426948/4018207 – AndiGeeky