2016-11-27 151 views
0

我想连接到https服务器,该服务器有self signed certificate,但不修改我的客户端代码。告诉java客户端代码接受自签名证书

我知道这个问题已被问了很多次,但我无法得到它的工作。下面是我做了什么:

  1. 在Firefox中打开https服务器

  2. 点击上面的URL信息,那么更多的信息,然后查看证书,则详细信息,然后单击导出。

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

  4. 打开命令提示符,转到客户端代码,这在我的情况是c:\jdk-7u55-windows-x64\jre\bin

  5. 输入以下命令使用的java_home文件夹:

    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 

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

+0

您可以验证证书是否已正确导入信任存储区。使用以下命令列出信任存储中的证书。 'keytool -list -keystore cacerts.jks' 也请追加与失败相关的日志。 – dammina

+0

@dammina是的,列表命令显示服务器别名是今天导入的。日志只显示SSLHandshakeException。我已添加完整的例外 – PeteSpo

+0

http://stackoverflow.com/questions/9210514/unable-to-find-valid-certification-path-to-requested-target-error-even-after-c – dammina

回答

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

相关问题