1

我有一个 web 服务器,它通过 HTTPS 托管 webaplication 和 rest API。服务器上安装了由 Symantech 签署的*.thedomain.com 证书。“thedomain”用于示例目的。这不是实际的域。

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

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

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

在仍然能够对服务器进行身份验证的同时,什么是解决此错误的好方法?Web 浏览器如何能够验证服务器而不是 JDK (7) ?

4

2 回答 2

4

它可以在浏览器中使用,因为 CA 证书在浏览器的密钥环中,而不是在 JDK 使用的密钥环中。

用于keytool将您的 CA 证书添加到 JDK 密钥环:

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

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

于 2013-10-09T15:18:13.493 回答
1

所以,这里有几个想法。

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

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

于 2013-10-08T22:24:18.000 回答