HttpClient 抛出 ssl 错误,但 webview 和 HttpsURLConnection 不会

Posted

技术标签:

【中文标题】HttpClient 抛出 ssl 错误,但 webview 和 HttpsURLConnection 不会【英文标题】:HttpClient throws ssl error but webview and HttpsURLConnection don't 【发布时间】:2017-08-22 18:23:04 【问题描述】:

所以我使用服务器 (google-app-engine) 在客户端应用程序上进行身份验证。 当我使用 JavaFX Webview 或 HttpsURLConnection 时一切正常并且它们连接但是当我使用 HttpClient 时它会引发以下错误

javax.net.ssl.SSLPeerUnverifiedException:对等体未通过身份验证 在 sun.security.ssl.SSLSessionImpl.getPeerCertificates(未知来源) 在 org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128) 在 org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:339) 在 org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:123) 在 org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:147) 在 org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108) 在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)

完整的 ssl 报告是 here

我正在使用的代码

System.out.println("I started");
        String https_url = "https://app.quagrum.com";
          URL url;
          try 

             url = new URL(https_url);
             HttpsURLConnection con = (HttpsURLConnection)url.openConnection();//Works 
             System.out.println("I ran?");
    
          catch(Exception a)
          

          
    try 
        HttpGet get = new HttpGet("https://app.quagrum.com");
        HttpClient httpclient = new DefaultHttpClient();
        HttpResponse response = httpclient.execute(get);//Throws error
        System.out.println(response.getStatusLine().getStatusCode());
        if(response.getStatusLine().getStatusCode()!=200)
        
            HttpEntity entity = response.getEntity();

            if (entity != null) 
                InputStream instream = entity.getContent();
                try 
                    Scanner s = new Scanner(instream).useDelimiter("\\A");
                    String result = s.hasNext() ? s.next() : "";
                    System.out.println(result);
                    result =result.substring(result.indexOf("\"",7));
                    result=result.substring(0, result.indexOf("\""));
                    System.out.println(result);
                 finally 
                    instream.close();
                
            
        
        catch(Exception a)
        
            a.printStackTrace();
        
    

【问题讨论】:

【参考方案1】:

现在它可以正常工作了。没关系,java 让我完全重新设计程序的一部分,然后让它在以后的版本中工作

【讨论】:

以上是关于HttpClient 抛出 ssl 错误,但 webview 和 HttpsURLConnection 不会的主要内容,如果未能解决你的问题,请参考以下文章

Apache HttpClient 能够在 DIRECT 时通过 HTTPS 进行通信,但不能通过 PROXY 错误:javax.net.ssl.SSLPeerUnverifiedException:

找不到 SSL 证书的 Java HttpClient 错误,在代码中使用证书作为字符串?

在 Mono 上使用自定义 SSL 客户端证书 System.Net.HttpClient

解决httpclient访问ssl资源报证书错误的问题

C# HttpClient 是不是忽略 SSL 证书错误?

HttpClient 4.1 出现 SSL“Peer Not Authenticated”错误