如何在没有证书的情况下连接到https web服务?

如何在没有证书的情况下连接到https web服务?

问题描述:

我需要为我的客户创建应用程序,以及一个部分从应用程序使用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”。这是我的客户的服务,都是合法的。我该如何解决这个错误?

您可以将自定义服务器证书放入信任库中,并将其作为资源包含在您的应用程序中。

创建与该服务器的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