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

时间:2016-11-27 10:05:09

标签: java https jvm

我希望连接到https服务器,其self signed certificate,而不修改我的客户端代码。

我知道这个问题已被多次询问,但我无法让它发挥作用。这就是我所做的:

  1. 在Firefox中打开https服务器

  2. 点击网址信息,然后点击更多信息,然后查看证书,然后点击详细信息,然后点击导出。

  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
    
  6. 我也尝试过:

       keytool -import -v -trustcacerts
                        -alias server-alias2 -file C:\Downloads\certificate.crt
                        -keystore keystore.jks
    
    1. 重新启动客户端应用程序
    2. 在完成所有这些之后,我仍然得到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
      

      我不知道自己做错了什么,做了什么或如何进一步调试。

1 个答案:

答案 0 :(得分:0)

指定所需的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>作为您应用的起始参数。 More info