Java 是 'unable to find valid certification',尽管 TrustStore 包含根证书
Java is 'unable to find valid certification', although TrustStore contains root certificate
我正在尝试使用
向“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 全球根 CA,它已包含在 java 信任库中。为什么这还不够?
向使用此根证书的其他网站发送请求确实有效...
感谢您的帮助:)
发生此错误的原因(可能)是因为服务器配置错误。
您可以在这里查看:https://whatsmychaincert.com/?api.ecs.echa.europa.eu
此站点会告诉您服务器证书链是否配置正确,但似乎并非如此。
此外,您可以使用 public 密钥在同一站点上生成完整的证书链。
尝试修复此问题并再次测试。
我正在尝试使用
向“https://api.ecs.echa.europa.eu”发送一个 HttpRequestHttpRequest 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
我仍然不明白的是为什么这是必要的:
特定网站 (https://api.ecs.echa.europa.eu) 使用根证书 DigiCert 全球根 CA,它已包含在 java 信任库中。为什么这还不够?
向使用此根证书的其他网站发送请求确实有效...
感谢您的帮助:)
发生此错误的原因(可能)是因为服务器配置错误。 您可以在这里查看:https://whatsmychaincert.com/?api.ecs.echa.europa.eu
此站点会告诉您服务器证书链是否配置正确,但似乎并非如此。
此外,您可以使用 public 密钥在同一站点上生成完整的证书链。
尝试修复此问题并再次测试。