2011-11-05 64 views
2

我需要爲我的客戶創建應用程序,以及一個部分從應用程序使用HTTPS連接:如何在沒有證書的情況下連接到https web服務?

public static void getVersions() throws IOException, ParserConfigurationException, SAXException { 

    URL u = new URL(VERSION_URL); 
    HttpsURLConnection c = (HttpsURLConnection) u.openConnection(); 
    c.setRequestMethod("GET"); 
    c.setDoOutput(true); 
    c.connect(); 
    InputStream in = c.getInputStream(); 

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = null; 
    builder = factory.newDocumentBuilder();         
    Document d = builder.parse(in); 
} 

但是,當我嘗試使用它,我會得到IO異常:「沒有可信證書的Java」。這是我的客戶的服務,都是合法的。我該如何解決這個錯誤?

回答

0

您可以將自定義服務器證書放入信任庫中,並將其作爲資源包含在您的應用程序中。

創建與該服務器的HTTPS連接時,可以指定此信任存儲庫包含受信任的證書。這可以通過創建自己的SSLSocketFactory實例進行

KeyStore trusted = KeyStore.getInstance("BKS"); 
InputStream in = context.getResources().openRawResource(R.raw.mystore); 
trusted.load(in, "mypassword".toCharArray()); 
in.close(); 
SSLSocketFactory mySslFact = new SSLSocketFactory(trusted); 

參見:How Can I Access an SSL Connection Through Android?

+0

謝謝。你知道禁用驗證的任何技巧嗎? – user1023177

+0

是的,但它們是無稽之談,因爲你失去了使用SSL獲得的一半安全性。正如我將它與包含正確DNS名稱的自定義證書一起描述的那樣使用該解決方案。那麼你不需要禁用驗證。 – Robert

+0

再次感謝您,但您能否給我解決我的問題的任何訣竅,但現在安全並不重要,我需要制定應用程序的工作原型。謝謝。 – user1023177

相關問題