0

我安装了 pkcs12 证书,可以在浏览器上加载 url “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

请帮我

4

2 回答 2

0

由于您使用的是自签名证书,JVM 不信任它,因此httpsURL 不起作用。您需要将其添加到 JVM 的密钥库中,keytool 请参阅本文

编辑:对不起,我忘了提到您需要指定 JVM 默认密钥库cacerts。本文将向您展示它是如何完成的。

另请注意,您的证书必须与您的 URL完全匹配。

于 2013-04-13T21:55:00.953 回答
0

您获得的原因java.security.cert.CertificateException: No name matching localhost foundCN证书的名称与您访问服务器的 URL 的主机名不匹配。因此,您要么需要创建一个正确的证书CN,要么您可以编写自己的证书HostNameVerifier来忽略该问题。但是,如果您这样做,请确保在完成测试后删除该代码。本文档指定了如何执行此操作:

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;
        }
    };
);
于 2013-04-14T10:08:47.390 回答