java:使用客户端证书加载HTTPS url
我安装了pkcs12证书,可以在浏览器上加载url“httpsURL” 但是我的独立java程序不能做同样的事情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
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被篡改或密码不正确”消息