javax.net.ssl​​.SSLPeerUnverifiedException:没有对方的证书,而我与谷歌的地方API中的机器人工作 [英] javax.net.ssl.SSLPeerUnverifiedException: No peer certificate while I am working with google place api in android

查看:1090
本文介绍了javax.net.ssl​​.SSLPeerUnverifiedException:没有对方的证书,而我与谷歌的地方API中的机器人工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我现在面临一个javax.net.ssl​​.SSLPeerUnverifiedException:没有对方的证书例外,而与谷歌的地方API中的Andr​​oid emulator.Below工作是我的网址:

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

当我简单地说,上面粘贴URL在浏览器地址栏中,简单给出的Json string.So,我认为没有必要任何证书的认证。

在做这么多的使用Google倾注2-3天,我用SSLSocketFacory类org.apache.http.conn.ssl.SSLSocketFactory包,以避免对证书错误。

下面是我的code:

 公共静态的HttpClient wrapClient(HttpClient的基础){
        尝试 {
            的SSLContext CTX = SSLContext.getInstance(TLS);
            X509TrustManager TM =新X509TrustManager(){

                公共无效checkClientTrusted(x509证书[] XCS,串串)抛出CertificateException {
                }

                公共无效checkServerTrusted(x509证书[] XCS,串串)抛出CertificateException {
                }

                公共x509证书[] getAcceptedIssuers(){
                    返回null;
                }
            };
            X509HostnameVerifier验证=新X509HostnameVerifier(){

                公共无效验证(串串,SSLSocket SSLS)抛出IOException异常{
                }

                公共无效验证(串串,x509证书XC)抛出异常SSLException {
                }

                公共无效验证(字符串,字符串,字符串[]字符串,字符串[] strings1)抛出异常SSLException {
                }

                公共布尔验证(字符串字符串的SSLSession SSLS){
                    返回true;
                }
            };
            ctx.init(空,新的TrustManager [] {} TM,NULL);
            SSLSocketFactory的SSF =新的SSLSocketFactory(CTX);
            ssf.setHostnameVerifier(验证);
            ClientConnectionManager CCM = base.getConnectionManager();
            SchemeRegistry SR = ccm.getSchemeRegistry();
            sr.register(新计划(https开头,社保基金,443));
            返回新DefaultHttpClient(CCM,base.getParams());
        }赶上(例外前){
            ex.printStackTrace();
            返回null;
        }
    }
 

我使用Android的API 16,当我使用的SSLSocketFactory(SSLSocketContext)构造,日食给compliation错误,所以我搜索了很多,有下载JAR 的SSLSocketFactory(SSLSocketContext),这是HttpClient的-4.1.1.jarfile.And我还设置了一罐项目构建路径的顺序,设置最高priority.Now我得到以下警告:

  VFY:无法解决直接的方法4253:Lorg /阿帕奇/ HTTP /康涅狄格州/ SSL / SSLSocketFactory的&LT; INIT&GT;
 

和按

下面的错误造成的长期跟踪

  java.lang.NoSuchMethodError:org.apace.http.conn.ssl.SSLSocketFactory&LT; INIT&GT;
 

请,帮助我,我不知道,我在哪里错了。

解决方案

我也有这个问题,并搜查很多东西在互联网,但我的由一个简单的步骤,解决

我不知道确切的原因,但我用的重新启动仿真器解决了它,或者创建一个新的模拟器,并运行在新的仿真器项目

我不会说这是确切的答案,但修改之前尝试一下您的编码与复杂codeS

I am facing an javax.net.ssl.SSLPeerUnverifiedException: No peer certificate exception while working with google place api in android emulator.Below is my url:

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

when i simply , paste above url in browser address bar , it simple gives Json string.So , i think there is no need of any certificate authentication.

After doing so many googling and devoted 2-3 days, i've used SSLSocketFacory class of org.apache.http.conn.ssl.SSLSocketFactory package to avoid peer certificate error.

below is my code :

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

I am using android api 16 , and when I used SSLSocketFactory(SSLSocketContext) constructor,eclipse gives compliation error , so i've search alot and download jar having SSLSocketFactory(SSLSocketContext) ,which is "httpclient-4.1.1.jar" file.And i also set order of that jar in project build path , have set highest priority.Now I am getting following warning:

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

And following long trace of error caused by

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

Please , help me I don't know ,where I am wrong.

解决方案

I too had this problem, and searched lot of things in Internet, but I solved by a simple step

I don't know the exact Cause, But I solved it by Restarting Emulator or create a NEW Emulator, and Run the project in that new Emulator

I won't say this is the exact answer but Try it before modifying your coding with Complex codes

这篇关于javax.net.ssl​​.SSLPeerUnverifiedException:没有对方的证书,而我与谷歌的地方API中的机器人工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆