我正在尝试使用
将HttpRequest发送到“ https://api.ecs.echa.europa.eu”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 truststore中。为什么还不够?
将请求发送到使用此根证书的其他网站确实有效...
感谢您的帮助:)
答案 0 :(得分:0)
(可能)发生此错误的原因是由于服务器配置错误。 您可以在此处查看:https://whatsmychaincert.com/?api.ecs.echa.europa.eu
此站点将告诉您服务器证书链是否配置正确,似乎并非如此。
此外,您还可以使用公共密钥在同一站点上生成完整的证书链。
尝试解决此问题,然后再次测试。