[英]Tell java client code to accept self signed certificate
我想连接到具有self signed certificate
的https
服务器,而无需修改我的客户端代码。
我知道这个问题已经被问过很多次了,但是我无法解决它。 这是我所做的:
在Firefox中打开https
服务器
单击URL信息,然后单击更多信息,然后查看证书,然后单击详细信息,然后单击导出。
选择默认的导出类型设置( X.509 Certificate (PEM)
,另存为certificate.crt
),然后将其保存到磁盘。
打开命令提示符,转到客户端代码使用的java_home
文件夹,在我的情况下为c:\\jdk-7u55-windows-x64\\jre\\bin
输入以下命令:
keytool -import -v -trustcacerts -alias server-alias -file C:\\Downloads\\certificate.crt -keystore cacerts.jks -keypass changeit -storepass changeit
我也尝试过:
keytool -import -v -trustcacerts
-alias server-alias2 -file C:\Downloads\certificate.crt
-keystore keystore.jks
完成所有这些操作后,我仍然会收到SSLHandshakeException
(无法找到指向请求目标的有效证书路径)。 日志中的完整异常:
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
我不知道我做错了什么,还有什么要做或如何进一步调试。
指定所需cacerts.jks
绝对路径应该会有所帮助。 当前使用keytool
只会在您的当前目录中创建新的.jks(我想)是c:\\jdk-7u55-windows-x64\\jre\\bin
。 默认的cacerts位置通常位于JAVA_HOME/jre/lib/security/cacerts
。 或者,您可以使用-Djavax.net.ssl.trustStore=<path to custom store> -Djavax.net.ssl.trustStorePassword=<custom store_passwd>
作为应用程序的起始参数。 更多信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.