8

私はjavax.net.ssl.SSLPeerUnverifiedExceptionに直面しています:Androidエミュレーターでgoogle place apiを使用しているときにピア証明書の例外はありません。以下は私のURLです:

https://maps.googleapis.com/maps/api/place/search/json?&location=28.632808,77.218276&radius=1000&sensor=false&key=AIzaSyC3y3fOMTqTkCjNNETQTCKustG7BRk_eVc

単純に、ブラウザのアドレスバーのURLの上に貼り付けると、Json文字列が表示されます。したがって、証明書認証は必要ないと思います。

非常に多くのグーグルを実行し、2〜3日を費やした後、ピア証明書エラーを回避するためにorg.apache.http.conn.ssl.SSLSocketFactoryパッケージのSSLSocketFacoryクラスを使用しました。

以下は私のコードです:

public static HttpClient wrapClient(HttpClient base) {
        try {
            SSLContext ctx = SSLContext.getInstance("TLS");
            X509TrustManager tm = new X509TrustManager() {

                public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException {
                }

                public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException {
                }

                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
            };
            X509HostnameVerifier verifier = new X509HostnameVerifier() {

                public void verify(String string, SSLSocket ssls) throws IOException {
                }

                public void verify(String string, X509Certificate xc) throws SSLException {
                }

                public void verify(String string, String[] strings, String[] strings1) throws SSLException {
                }

                public boolean verify(String string, SSLSession ssls) {
                    return true;
                }
            };
            ctx.init(null, new TrustManager[]{tm}, null);
            SSLSocketFactory ssf = new SSLSocketFactory(ctx);
            ssf.setHostnameVerifier(verifier);
            ClientConnectionManager ccm = base.getConnectionManager();
            SchemeRegistry sr = ccm.getSchemeRegistry();
            sr.register(new Scheme("https", ssf, 443));
            return new DefaultHttpClient(ccm, base.getParams());
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

私はandroidapi16を使用していますが、SSLSocketFactory(SSLSocketContext)コンストラクターを使用すると、eclipseでコンパイルエラーが発生するため、「httpclient-4.1.1.jar」ファイルであるSSLSocketFactory(SSLSocketContext)を含むjarをたくさん検索してダウンロードしました。また、プロジェクトビルドパスでそのjarの順序を設定し、最高の優先度を設定しました。現在、次の警告が表示されます。

VFY:unable to resolve direct method 4253:Lorg/apache/http/conn/ssl/SSLSocketFactory.<init>

そして、によって引き起こされたエラーの長いトレースに続いて

java.lang.NoSuchMethodError : org.apace.http.conn.ssl.SSLSocketFactory.<init>

どうか、私がどこが間違っているのかわからないのを手伝ってください。

4

1 に答える 1

2

私もこの問題を抱えていて、インターネットでたくさんのことを検索しましたが、簡単な手順で解決しました

正確な原因はわかりませんが、エミュレータを再起動するか、新しいエミュレータを作成して、その新しいエミュレータでプロジェクトを実行することで解決しました。

これが正確な答えだとは言いませんが、複雑なコードでコーディングを変更する前に試してみてください

于 2013-03-09T10:06:59.663 に答える