2013-07-17 34 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

相关问题