繁体   English   中英

告诉Java客户端代码接受自签名证书

[英]Tell java client code to accept self signed certificate

我想连接到具有self signed certificatehttps服务器,而无需修改我的客户端代码。

我知道这个问题已经被问过很多次了,但是我无法解决它。 这是我所做的:

  1. 在Firefox中打开https服务器

  2. 单击URL信息,然后单击更多信息,然后查看证书,然后单击详细信息,然后单击导出。

  3. 选择默认的导出类型设置( X.509 Certificate (PEM) ,另存为certificate.crt ),然后将其保存到磁盘。

  4. 打开命令提示符,转到客户端代码使用的java_home文件夹,在我的情况下为c:\\jdk-7u55-windows-x64\\jre\\bin

  5. 输入以下命令:

     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
  1. 重新启动客户端应用程序

完成所有这些操作后,我仍然会收到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM