到目前为止,我正在连接到一个返回一些数据的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();
答案 0 :(得分:0)
您的服务器使用某些由iOS识别且Android无法识别的证书颁发机构。除了向服务器团队投诉外,你几乎无法直接做到这一点。
如果您的minSdkVersion
为24或更高,则可以使用network security configuration向Android讲授您的证书颁发机构。这不需要对Java代码进行任何更改,但需要设置一些资源并在清单中指向它们。
如果minSdkVersion
为17到23,则可以使用my backport of network security configuration,但这需要更改一些代码。
如果您的minSdkVersion
低于17,则需要使用自签名证书或多或少地将此情况视为服务器,并自行推送TrustManager
。