javax.net.ssl.SSLPeerUnverifiedException: нет однорангового сертификата, пока я работаю с Google Place API в Android

Я столкнулся с javax.net.ssl.SSLPeerUnverifiedException: нет исключения однорангового сертификата при работе с google place api в эмуляторе Android. Ниже приведен мой URL-адрес:

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

когда я просто вставляю URL-адрес выше в адресную строку браузера, он просто дает строку Json. Итак, я думаю, что нет необходимости в какой-либо аутентификации сертификата.

После стольких поисков в Google и посвященных 2-3 дням я использовал класс SSLSocketFacory пакета org.apache.http.conn.ssl.SSLSocketFactory, чтобы избежать ошибки однорангового сертификата.

ниже мой код:

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

Я использую android api 16, и когда я использовал конструктор SSLSocketFactory (SSLSocketContext), eclipse выдает ошибку компиляции, поэтому я много искал и загружал jar с SSLSocketFactory (SSLSocketContext), который является файлом «httpclient-4.1.1.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>

Пожалуйста, помогите мне, я не знаю, где я не прав.


person ved    schedule 21.11.2012    source источник
comment
Это происходит на реальном устройстве? Какую версию Android эмулирует ваш эмулятор? Использование диспетчера доверия «без проверки» — очень плохая идея, так что не делайте этого.   -  person Nikolay Elenkov    schedule 21.11.2012
comment
Проблема была решена. Большое спасибо stackoverflow. Ссылка ниже решила мою проблему. stackoverflow.com/questions/7622004/   -  person ved    schedule 21.11.2012
comment
НЕ ДЕЛАЙ ЭТО. ОТКЛЮЧЕНИЕ SSL — ОГРОМНАЯ ДЫРА В БЕЗОПАСНОСТИ. Извините за все заглавные буквы.   -  person Bishnu    schedule 13.03.2013


Ответы (1)


У меня тоже была эта проблема, и я искал много вещей в Интернете, но я решил ее простым шагом

Я не знаю точную причину, но я решил ее, перезапустив эмулятор или создав НОВЫЙ эмулятор, и запустив проект в этом новом эмуляторе.

Я не скажу, что это точный ответ, но попробуйте, прежде чем изменять свой код со сложными кодами.

person Mani    schedule 09.03.2013
comment
Это была именно моя проблема, нужно попробовать это раньше вместо сложного кодирования - person Ghashange; 25.09.2014