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)at libcore.net.http.HttpsURLConnectionImpl $ HttpUrlConnectionDelegate.getCacheResponse(HttpsURLConnectionImpl.java:390)atlibcore.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);
}
}