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 низ. Така че мисля, че няма нужда от никакво удостоверяване на сертификат.

След като направих толкова много гугъл и посветих 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 дава грешка при компилиране, така че търся много и изтеглям буркан с 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