如何解决由公共CA机构签名的服务器公共证书"unable to find valid certification path to requested target"?



我有一个Web服务器,它通过HTTPS托管webapplication和rest API。服务器上安装了由赛门泰克签名的 *.thedomain.com 证书。"thedomain"用于示例目的。这不是实际的域。

我认为信任链没有问题,因为服务器提供的证书在任何浏览器的默认设置下都被接受,而无需执行任何操作。

现在,我正在尝试为该服务器提供的其余 API 创建一个 Java 客户端。

问题是抛出对请求目标的sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path。如果我理解正确,这意味着 JDK 支持的 ca 不提供允许正确验证服务器的有效证书路径。

仍然能够认证服务器的同时,这个错误的好解决方案是什么?为什么 Web 浏览器能够对服务器而不是 JDK 进行身份验证 (7) ?

它在浏览器中工作,因为 CA 证书位于浏览器的密钥环中,而不是 JDK 使用的密钥环中。

使用keytool将 CA 证书添加到 JDK 密钥环,如下所示:

keytool -keystore cacerts -importcert -alias aliasOfTheCertificate -file FileNameOfTheCertificate.cer 

从命令行。请注意,许多 Linux 发行版已经发布了包含所有受信任根的 ca-certs-java 包,如果可能的话,请尝试使用它。

所以,这里有几个想法。

1.)赛门泰克似乎相当新,可能不在您使用的cacerts文件中。 您是否尝试过最新版本的 jdk/jre?

2.) 我建议使用 InstallCert 应用程序创建一个新的 cacerts 文件,该文件将信任您站点的证书。 您需要在 VM 参数中使用 -Djavax.net.ssl.trustStore 和 -Djavax.net.ssl.trustStorePassword 参数指向新的 cacerts 文件。

相关内容

  • 没有找到相关文章

最新更新