2015-04-27 65 views
0

有人可以告訴我如何使用HttpClient v4.1發出HTTPS請求,而不需要任何驗證有關主機名和證書。我讀了很多問題,論壇和嘗試了很多不同的東西,最終結束了這個:如何在Java中使用HttpClient進行HTTPS請求,無需進行證書認證或主機名驗證?

SSLContext context = SSLContext.getInstance("SSL"); 
context.init(new KeyManager[] {}, new TrustManager[] {}, new SecureRandom()); 
SSLSocketFactory sf = new SSLSocketFactory(context, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 
client.getConnectionManager().getSchemeRegistry().register(new Scheme("https", 443, sf)); 

...然後當我去發出請求,我得到:

javax.net.ssl.SSLPeerUnverifiedException:同行不認證

我知道什麼,我試圖做的是不是安全。

回答

0

除了上面的其他行之外,這個技巧還行。這裏還有這麼多的變化和版本,我在他們所有迷路了:

context.init(new KeyManager[] {}, new TrustManager[] {new X509TrustManager() { 
     @Override 
     public X509Certificate[] getAcceptedIssuers() {return null; } 

     @Override  
     public void checkServerTrusted(X509Certificate[] arg0, String arg1)throws CertificateException {} 

     @Override 
     public void checkClientTrusted(X509Certificate[] arg0, String arg1)throws CertificateException {} 

    }}, new SecureRandom()); 

我會再次提到它,這是不安全的,除非你知道自己在做什麼,不這樣做。

相關問題