2016-11-07 220 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。 –