Java не может найти действительный сертификат, хотя TrustStore содержит сертификат root - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь отправить 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 хранилище доверенных сертификатов в $JAVA_HOME/jre/lib/security/cacerts

Что я до сих пор не понимаю, почему это необходимо:

Спецификация c веб-сайт (https://api.ecs.echa.europa.eu) использует сертификат root DigiCert Global Root CA , который уже содержится в доверенном хранилище java. Почему этого недостаточно?

Отправка запросов на другие веб-сайты, использующие этот root сертификат, работает ...

Спасибо за помощь:)

1 Ответ

0 голосов
/ 11 февраля 2020

Причина, по которой эта ошибка возникает (вероятно) из-за неправильно настроенного сервера. Вы можете проверить здесь: https://whatsmychaincert.com/?api.ecs.echa.europa.eu

Этот сайт скажет вам, правильно ли сконфигурирована цепочка сертификатов вашего сервера, что не так.

Кроме того, вы способны создать полную цепочку сертификатов на том же сайте, используя ваш ключ publi c.

Попробуйте исправить это и протестируйте снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...