我想连接到https
服务器,该服务器有self signed certificate
,但不修改我的客户端代码。告诉java客户端代码接受自签名证书
我知道这个问题已被问了很多次,但我无法得到它的工作。下面是我做了什么:
在Firefox中打开
https
服务器点击上面的URL信息,那么更多的信息,然后查看证书,则详细信息,然后单击导出。
选择默认导出类型设置(
X.509 Certificate (PEM)
,保存为certificate.crt
),并将其保存到磁盘。打开命令提示符,转到客户端代码,这在我的情况是
c:\jdk-7u55-windows-x64\jre\bin
输入以下命令使用的
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
- 重启客户端应用程序
这一切之后,我仍然获得了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
我不知道我做错了什么,还能做什么或如何进一步调试。
您可以验证证书是否已正确导入信任存储区。使用以下命令列出信任存储中的证书。 'keytool -list -keystore cacerts.jks' 也请追加与失败相关的日志。 – dammina
@dammina是的,列表命令显示服务器别名是今天导入的。日志只显示SSLHandshakeException。我已添加完整的例外 – PeteSpo
http://stackoverflow.com/questions/9210514/unable-to-find-valid-certification-path-to-requested-target-error-even-after-c – dammina