我安装了pkcs12证书,可以在浏览器上加载网址“httpsURL”。
但我的独立java程序无法做到这一点。
System.setProperty("javax.net.ssl.keyStore", "d:/keys2222/prince.p12");
System.setProperty("javax.net.ssl.keyStorePassword", "password");
URL url = new URL("httpsURL"); // URL is perfect
URLConnection con = url.openConnection(); // fails here
请帮帮我
答案 0 :(得分:0)
由于您使用的是自签名证书,因此JVM不信任它,因此https
URL不起作用。
您需要使用keytool
将其添加到JVM的密钥库中
见article。
编辑:抱歉,我忘了提到您需要指定JVM默认密钥库cacerts
。这个article会告诉你它是如何完成的。
另请注意,您的证书必须与您的网址完全匹配。
答案 1 :(得分:0)
您获得java.security.cert.CertificateException: No name matching localhost found
的原因是证书的CN
与您正在访问服务器的URL的主机名不匹配。因此,您需要使用正确的CN
创建证书,或者您可以编写自己的HostNameVerifier
来忽略该问题。但是如果你这样做,请确保在完成测试后删除该代码。 This document指定了如何执行此操作:
javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
new javax.net.ssl.HostnameVerifier(){
public boolean verify(String hostname, javax.net.ssl.SSLSession sslSession) {
if (hostname.equals("theHostname")) {
return true;
}
return false;
}
};
);