Исключение SSLHandshakeException: ошибка построения пути PKIX из-за невозможности найти цепочку сертификатов

#java #ssl #https #ssl-certificate #ssrs-2016

#java #ssl #https #ssl-сертификат #ssrs-2016

Вопрос:

Я пытаюсь подключить SSRS ReportServer по протоколу HTTPS с Java-клиента, который выдает исключение javax.net.ssl.SSLHandshakeException: sun.security.validator.Исключение ValidatorException: ошибка построения пути PKIX: java.security.cert.Исключение CertPathBuilderException: не удалось найти цепочку сертификатов Но я добавил сертификат в хранилище ключей Java, в хранилище ключей сертификат отображается с определенным псевдонимом. Но тот же вызов запроса SSRS работает с протоколом HTTP. Примечание: Мы используем подстановочный сертификат от Go-Daddy для безопасной связи

Ответ №1:

Можете ли вы проверить, что сертификат добавлен в ‘Java Truststore’, а не в хранилище ключей (хотя оба имеют расширение .jks). Взгляните на это https://docs.oracle.com/cd/E19830-01/819-4712/ablqw/index.html

Файл хранилища ключей keystore.jks содержит сертификат сервера приложений, включая его закрытый ключ

Файл Truststore, cacerts.jks, содержит доверенные сертификаты сервера приложений

Ответ №2:

Когда вы получали свой сертификат, в нем должен был быть p7b (возможно), включенный в него.

По сути, когда GoDaddy выдает сертификат, они не выдаются напрямую из корневого каталога.

Скорее всего, у вас есть сертификат, выданный промежуточным органом.

Вы можете получить промежуточные сертификаты по https://ssl-ccp.godaddy.com/repository?origin=CALLISTO

Цепочку сертификатов необходимо добавить к фактическому сертификату и импортировать на сервер.

Файл PEM, содержащий импортируемый сертификат, должен выглядеть следующим образом:

 <actual certificate>
<intermediate certificate>
[<intermediate certificate> ...]
  

После этого у вас не должно возникнуть необходимости делать что-либо еще на клиенте.

Редактировать

После повторного прочтения моего ответа я понял, что может быть небольшая неопределенность в отношении процесса. Итак, в попытках довести этот цикл до более полного завершения, мы начинаем.

  1. Сгенерируйте пару ключей / самозаверяющий сертификат, скажем, в контейнере PKCS # 12.
  2. Создайте запрос на подпись сертификата PKCS # 10 для отправки в GoDaddy вышеуказанного сертификата.
  3. GoDaddy возвращает подписанный сертификат X.509 (обычно с инструкциями по его установке).
  4. Берем сертификат (предполагая формат PEM) и объединяем цепочку выдачи изhttps://ssl-ccp.godaddy.com/repository?origin=CALLISTO и импортируйте это обратно в PKCS # 12 с шага 1.
  5. Назначьте PKCS # 12 в качестве хранилища сертификатов TLS на сервере SSRS.