2013-07-17 38 views
0

我們正在使用DIFF庫與HTTPGET可能是因爲服務器請求客戶端身份驗證

Apache-HttpComponents-HttpCore = 4.1; 
Apache-HttpComponents-HttpClient = 4.1.1; 
JDK       = 1.6_64; 

的版本之後,突然SSL問題開始SSLPeerUnverifiedException(HTTP Get failing for HTTPS with javax.net.ssl.SSLPeerUnverifiedException瞭解詳細信息)面對的問題。

我嘗試過不同的事情,但我不知道爲什麼我們無法連接到https://www.google.com即使在接受所有證書後(儘管正如評論中所解釋的那樣,它可能會導致中間人攻擊)。

Google開始期待客戶的證書嗎?如果是的話,我們該怎麼辦?

感謝,

+0

您是否嘗試設置'-Djavax.net.debug = ssl'? – Bruno

+0

不,請嘗試! – instanceOfObject

+0

我從瀏覽器嘗試使用與HttpClient相同的代理時收到'ssl_error_rx_record_too_long'。 – instanceOfObject

回答

0

難道說谷歌開始從客戶期待證書的情況下?如果是的話,我們該怎麼辦?

如果我理解你的權利和谷歌真正需要證書,你應該使用cryptoprovider並通過stunnel簽名。

也許你的代碼有問題嗎?此設置適用於我

public HttpClient getNewHttpClient() { 
    try { 
     KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); 
     trustStore.load(null, null); 

     SSLSocketFactory sf = new MySSLSocketFactory(trustStore); 
     sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 

     HttpParams params = new BasicHttpParams(); 
     HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); 
     HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); 

     SchemeRegistry registry = new SchemeRegistry(); 
     registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 
     registry.register(new Scheme("https", sf, 443)); 

     ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry); 

     return new DefaultHttpClient(ccm, params); 
    } catch (Exception e) { 
     return new DefaultHttpClient(); 
    } 
} 
+0

爲什麼使用'ALLOW_ALL_HOSTNAME_VERIFIER'來允許潛在的MITM攻擊? – Bruno

相關問題