2016-12-21 22 views
1

До сих пор я подключался к серверу http, который возвращает некоторые данные. Теперь этот сервер изменился и его https. Теперь, при подключении к новому URL я получаю это исключение:Подключение к https дает: SSLHandshakeException Цепочный якорь для пути сертификации не найден

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

В прошивкой эта проблема не существует, и новый протокол 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

Check -> http://stackoverflow.com/a/21426948/4018207 – AndiGeeky

ответ

0

Ваш сервер использует некоторый сертификат орган, который распознается прошивкой и не распознается Android. Существует мало того, что вы можете сделать это напрямую, за исключением жалобы на команду сервера.

Если ваш minSdkVersion равен 24 или выше, вы можете использовать network security configuration, чтобы научить Android о вашем сертификационном центре. Это не потребует каких-либо изменений в Java-коде, но для этого потребуется настроить некоторые ресурсы и указать на них в манифесте.

Если ваш minSdkVersion с 17 по 23, вы можете использовать my backport of network security configuration, хотя для этого потребуются некоторые изменения кода.

Если ваш minSdkVersion ниже 17, вам необходимо будет обработать эту ситуацию более или менее как сервер, используя самозаверяющий сертификат, и свернуть свой собственный TrustManager.