Начиная с Android ICS у нас есть проблемы с проверкой наших сертификатов, которые мы получаем от HttpsUrlConnection
.В более ранних версиях Android это работало хорошо.Вот что мы пытаемся сделать:
BrowserCompatHostnameVerifier hostNameVerifier = new BrowserCompatHostnameVerifier();
HttpsURLConnection.setDefaultHostnameVerifier(hostNameVerifier);
URL url = new URL(serverUrl);
this.urlConnection = (HttpsURLConnection) url.openConnection();
this.urlConnection.connect();
hostNameVerifier.verify(urlConnection.getURL().getHost(),
(X509Certificate) urlConnection.getServerCertificates()[0]);
Выдается исключение:
java.lang.IllegalStateException at libcore.net.http.HttpEngine.getCacheResponse (HttpEngine.java:412) в libcore.net.http.HttpsURLConnectionImpl $ HttpUrlConnectionDelegate.getCacheResponse (HttpsURLConnectionImpl.java:390) в libcore.net.http.HttpsURLURNER0NerImpServer_Imp1* Кто-нибудь знает, что могло пойти не так и почему оно сохраняется только после ICS?
Спасибо!
----- Обновление ------- Теперь я сделал свой собственный HostnameVerifierкак это.Я избегаю метода getServerCertificates () - вот так, и он работает:
public class MyHostNameVerifier implements HostnameVerifier {
private String expectedHost;
public MyHostNameVerifier(String expectedHost) {
this.expectedHost = expectedHost;
}
@Override
public boolean verify(String hostname, SSLSession session) {
return expectedHost.equals(hostname);
}
}