如何在没有证书的情况下连接到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);
谢谢。你知道禁用验证的任何技巧吗? – user1023177
是的,但它们是无稽之谈,因为你失去了使用SSL获得的一半安全性。正如我将它与包含正确DNS名称的自定义证书一起描述的那样使用该解决方案。那么你不需要禁用验证。 – Robert
再次感谢您,但您能否给我解决我的问题的任何诀窍,但现在安全并不重要,我需要制定应用程序的工作原型。谢谢。 – user1023177