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

java:使用客户端证书加载HTTPS url,java,https,ssl-certificate,Java,Https,Ssl Certificate,我安装了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 URLCon

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

请帮助我

因为您使用的是自签名证书,JVM不信任它,所以
https
URL不起作用。 您需要使用
keytool
看这个

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


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

您获得
java.security.cert.CertificateException的原因:未找到与本地主机匹配的名称
是证书的
CN
与您访问服务器的URL的主机名不匹配。因此,您需要使用正确的
CN
创建一个证书,或者您可以编写自己的
主机名验证程序来忽略该问题。但如果您这样做,请确保在完成测试时删除该代码。指定如何执行此操作:

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

请准确发布错误的错误和堆栈跟踪您是否已将密钥导入密钥库?@user2013926您有50分钟的时间按要求提供实际错误和堆栈跟踪。在你这么做之前,这不是一个真正的问题。我做了上述事情,但仍然得到了例外<代码>线程“main”中的异常javax.net.ssl.SSLHandshakeException:sun.security.validator.validator异常:PKIX路径生成失败:sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径,原因是:sun.security.validator.validator异常:PKIX路径生成失败:sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径
我以.cer格式从chrome导出了证书
和did
keytool-import-alias prince-keystore“C:/Program Files(x86)/Java/jre1.6.0/lib/security/cacerts”-文件d:/exported.cer
仍然无法获取“keystore被篡改或密码不正确”消息