【问题标题】:Java is 'unable to find valid certification', although TrustStore contains root certificateJava 是“无法找到有效的证书”,尽管 TrustStore 包含根证书
【发布时间】:2020-05-27 02:19:28
【问题描述】:

我正在尝试使用

向“https://api.ecs.echa.europa.eu”发送一个HttpRequest
HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://api.ecs.echa.europa.eu"))
                .GET()
                .build();
HttpClient httpClient = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build();
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());

执行此代码我得到javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

现在我已经通过将证书添加到$JAVA_HOME/jre/lib/security/cacerts 下的 java 信任库中找到了解决此问题的方法

我仍然不明白,为什么这是必要的:

特定网站 (https://api.ecs.echa.europa.eu) 使用根证书DigiCert Global Root CA,该证书已包含在 java 信任库中。为什么这还不够?

向使用此根证书的其他网站发送请求确实有效...

感谢您的帮助:)

【问题讨论】:

  • Java 的哪个版本?
  • 如果您使用的是应用程序容器,那么添加到 $JAVA_HOME/jre/lib/security/cacerts 将无济于事。您必须将其添加到应用容器正在使用的证书中。
  • 我使用的是 Java 13.0.1。添加到 cacerts 确实有帮助,但我想知道为什么它是必要的

标签: java ssl sslhandshakeexception truststore root-certificate


【解决方案1】:

发生此错误的原因(可能)是由于服务器配置错误。 你可以在这里查看:https://whatsmychaincert.com/?api.ecs.echa.europa.eu

这个网站会告诉你你的服务器证书链是否配置正确,但似乎不是这样。

此外,您还可以使用您的公钥在同一站点上生成完整的证书链。

尝试解决此问题并再次测试。

【讨论】:

  • 谢谢,这是有道理的。毫无疑问,它是由欧洲当局运营的服务器,所以我对此无能为力,但现在我至少知道这(可能)来自哪里
猜你喜欢
  • 1970-01-01
  • 2016-08-05
  • 2010-09-25
  • 2017-09-19
  • 1970-01-01
  • 2012-06-20
  • 2018-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多