java:使用客户端证书加载HTTPS URL

时间:2013-04-13 21:30:10

标签: java https ssl-certificate

我安装了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

请帮帮我

2 个答案:

答案 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;
        }
    };
);