2016-11-07 175 views
1

我使用httpclient 4.5.2来调用代理服务器。HttpClient 4.5.2 - SSL证书问题

HttpHost proxy = new HttpHost(proxyHost, proxyPort, https); 
HttpHost target = new HttpHost(ip, 443, "https"); 
HttpPost httppost = new HttpPost(url); 
CloseableHttpResponse response = httpclient.execute(target, httppost); 

下面是错误,我得到: -

javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? 
     at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:671) 
     at sun.security.ssl.InputRecord.read(InputRecord.java:504) 
     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927) 
     at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312) 
     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339) 
     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323) 
     at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:394) 
     at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353) 
     at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:141) 
     at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353) 
     at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:388) 
     at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) 
     at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184) 
     at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88) 
     at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) 
     at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) 
     at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:117) 

我可以知道这个错误是有关证书的问题?因为我已经将证书添加到信任库。

+0

任何人都可以帮忙吗? – user1238353

回答

1
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? 

我可以知道这个错误是有关证书的问题?因为我已经将证书添加到信任库。

这不是证书的问题。您访问的服务器不会执行正确的TLS握手。

我使用httpclient 4.5.2来调用代理服务器。

HTTP代理服务器上的HTTPS以纯文本HTTP CONNECT请求开始,然后建立隧道。只有在建立此隧道后,TLS握手才会与原始目标服务器完成。

+0

对不起,我找不到你。我正在访问代理服务器(https),然后httpclient将执行并传入第三方URL - 目标(https)。 – user1238353

+0

我可以使用TLS做什么? – user1238353

+0

虽然你在编辑的文章中声明了一些名为proxy的变量,但是你不使用它。我非常怀疑它会以这种方式神奇地应用。而TLS(或SSL或SSL/TLS)就是使HTTPS脱离HTTP的协议,即HTTPS是TLS连接中的HTTP。 –