2011-01-05 46 views
2

這裏是我的代碼的java給錯誤的HTTPS請求

 URL url = new URL(requestUrl); 
     HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(); 
     BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

我得到以下異常

java.security.cert.CertificateException: No name matching www.sandbox.freelancer.com found 

按照我知道這個網站沒有正確的證書。但任何我必須登錄到這個網站。任何建議將不勝感激。謝謝。

回答

3

創建一個不驗證證書鏈

TrustManager[] trustAllCerts = new TrustManager[]{ 
    new X509TrustManager() { 
     public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
      return null; 
     } 
     public void checkClientTrusted(
      java.security.cert.X509Certificate[] certs, String authType) { 
     } 
     public void checkServerTrusted(
      java.security.cert.X509Certificate[] certs, String authType) { 
     } 
    } 
}; 

信任管理器安裝所有信任信任管理器

try { 
    SSLContext sc = SSLContext.getInstance("SSL"); 
    sc.init(null, trustAllCerts, new java.security.SecureRandom()); 
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
} catch (Exception e) { 
} 

現在訪問HTTPS URL

try { 
    URL url = new URL("https://www.sandbox.freelancer.com"); 
    HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(); 
    BufferedReader br = 
     new BufferedReader(new InputStreamReader(conn.getInputStream())); 

} catch (MalformedURLException e) { 
} 
+0

爲什麼不創建只信任該特定證書的信任管理器,並對所有其他證書進行默認檢查? – 2011-01-06 00:11:26

+0

@GregS是的,這可能已經完成了,但我認爲這不會解決問題,如果證書有一個不受信任的根證書頒發機構鏈。 – 2011-01-06 16:41:37

1

您可以保存證書(在Firefox中獲取),然後將證書添加到密鑰存儲中,然後配置您的應用使用該密鑰存儲。

+0

我可以得到證書直接從網絡而不使用Firefox? – Barun 2011-01-05 16:17:51