2

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);
    }
}
4

1 に答える 1

0

あなたの問題に関連する以下のリンクをチェックしてみてください。

http://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html

Android:HttpsURLConnectionを使用したHTTPS(SSL)接続

Androidのhttpclientssl証明書

KeyStore keyStore = ...;
 TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
 tmf.init(keyStore);
 SSLContext context = SSLContext.getInstance("TLS");
 context.init(null, tmf.getTrustManagers(), null);
 URL url = new URL("https://www.example.com/");
 HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
 urlConnection.setSSLSocketFactory(context.getSocketFactory());
 InputStream in = urlConnection.getInputStream();
于 2011-12-06T10:56:34.070 に答える