С Android ICS у нас есть проблемы с проверкой наших сертификатов, которые мы получаем от HttpsUrlConnection
. В более ранних версиях Android это работало хорошо. Это то, что мы пытаемся сделать:Android ICS: проблемы с получением сертификата сервера HttpsUrlConnection
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 в libcore.net.http.HttpEngine.getCacheResponse (HttpEngine.java : 412) в libcore.net.http.HttpsURLConnectionImpl $ HttpUrlConnectionDelegate.getCacheResponse (HttpsURLConnectionImpl.java:390) в libcore.net.http.HttpsURLConnectionImpl.getServerCertificates (HttpsURLConnectionImpl.java:87)
Знает ли кто-нибудь, что могло пойти не так, и почему оно сохраняется только после 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);
}
}
Ссылки не помогают мне. Моя проблема связана только с Android 4. На 2 и 3 они работают. – zubke
Я думаю, что они внесли некоторые изменения в ICS. Посмотрите на ссылку http://android-developers.blogspot.com/2011/09/androids-http-clients.html – Maneesh
@zubke. Не могли бы вы указать, какое решение для ты был? –