javax.net.ssl.SSLPeerUnverifiedException:没有对方的证书,而

2019-08-03 01:12发布

这个问题已经在这里有一个答案:

  • 安卓:使HTTPS请求 2回答

我面临的javax.net.ssl.SSLPeerUnverifiedException:没有对方的证书例外,在Android的谷歌emulator.Below API的地方工作,而我的网址:

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包,以避免对证书错误。

下面是我的代码:

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)构造,日食给compliation错误,所以我搜索了很多具有的SSLSocketFactory(SSLSocketContext),这是“HttpClient的-4.1.1.jar”文件下载JAR。我也设置在项目构建路径的jar的秩序,已设置我得到以下警告最高priority.Now:

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

而继造成错误的长痕迹

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

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

Answer 1:

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

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

我不会说这是确切的答案,但与复杂的代码修改你的编码之前试试吧



文章来源: javax.net.ssl.SSLPeerUnverifiedException: No peer certificate while I am working with google place api in android [duplicate]