【问题标题】:How can I connect to https web-service without certificate?如何在没有证书的情况下连接到 https 网络服务?
【发布时间】:2011-11-05 12:32:06
【问题描述】:

我需要为我的客户创建应用程序,应用程序的一部分使用 https 连接:

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”。这是我的客户的服务,一切都是合法的。如何修复此错误?

【问题讨论】:

    标签: java android ssl certificate


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。您知道禁用验证的任何技巧吗?
    • 是的,但它们是无稽之谈,因为您失去了使用 SSL 获得的一半安全性。将我描述的解决方案与包含正确 dns 名称的自定义证书一起使用。那么您不需要禁用验证。
    • 再次感谢您,但是您能给我一些技巧来解决我的问题吗,但是现在安全性并不重要,我需要制作应用程序的工作原型。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2019-01-15
    • 2012-10-22
    相关资源
    最近更新 更多