Skip to content
EN

PKIX path building failed (Java)

Коротко:

Java SSLException "PKIX path building failed: unable to find valid certification path to requested target" — Java не может построить цепочку доверия. JVM truststore ($JAVA_HOME/lib/security/cacerts) не содержит CA или intermediate сервера. Фиксы: (1) keytool -import в cacerts, (2) -Djavax.net.ssl.trustStore для alternate truststore, (3) -Djavax.net.debug=ssl,handshake для диагностики.

Ниже: подробности, пример, связанные, FAQ.

Проверить SSL своего сайта →

Детали

  • Default truststore: $JAVA_HOME/lib/security/cacerts, пароль "changeit"
  • JDK 8u101+ умеет Let's Encrypt ISRG Root X1; older — нет
  • keytool -list -v -keystore cacerts — показывает все trusted CAs
  • Per-app truststore: -Djavax.net.ssl.trustStore=/path/to/custom.jks
  • -Djavax.net.debug=ssl:handshake:verbose — полный TLS debug

Пример

# Скачать CA cert с сервера
$ echo | openssl s_client -connect server:443 -showcerts 2>/dev/null | \
    openssl x509 -out server-ca.crt

# Import в Java cacerts
$ sudo /bin/keytool -import \
    -alias server-ca \
    -keystore /lib/security/cacerts \
    -storepass changeit \
    -file server-ca.crt

# Debug app
$ java -Djavax.net.debug=ssl:handshake MyApp

Связанные

Что такое ошибка sun.security.validator.ValidatorException: PKIX path building failed?

Ошибка sun.security.validator.ValidatorException: PKIX path building failed возникает, когда Java-приложение не может построить цепочку сертификатов для проверки SSL-соединения. Это обычно происходит из-за отсутствия доверенных сертификатов в хранилище Java или неправильной конфигурации SSL-сертификатов на сервере. Убедитесь, что все промежуточные сертификаты установлены правильно и что ваше Java-приложение может получить к ним доступ.

Причины возникновения ошибки и способы устранения

Ошибка PKIX path building failed может возникать по нескольким причинам:

  • Отсутствие корневого сертификата: Если корневой сертификат, подписывающий ваш SSL-сертификат, отсутствует в хранилище доверенных сертификатов Java, это может вызвать ошибку.
  • Неправильная цепочка сертификатов: Все промежуточные сертификаты должны быть правильно установлены на сервере. Если какой-то из них отсутствует или неправильно установлен, это может привести к ошибке.
  • Проблемы с конфигурацией Java: Убедитесь, что ваше Java-приложение использует правильное хранилище сертификатов. По умолчанию используется файл cacerts, который находится в папке lib/security вашего JRE.

Для устранения ошибки выполните следующие действия:

  1. Проверьте цепочку сертификатов с помощью команды openssl s_client -connect yourdomain.com:443 -showcerts. Это поможет вам увидеть, какие сертификаты возвращаются сервером.
  2. Импортируйте недостающие сертификаты в хранилище Java с помощью команды keytool -import -alias your_alias -file your_cert.crt -keystore $JAVA_HOME/lib/security/cacerts. Убедитесь, что вы используете правильный пароль для доступа к хранилищу (по умолчанию это changeit).
  3. Перезапустите ваше Java-приложение, чтобы изменения вступили в силу.

Практический пример: Как исправить ошибку PKIX path building failed

Рассмотрим практический пример, когда вы пытаетесь подключиться к вашему серверу через Java-приложение и получаете ошибку PKIX path building failed. Предположим, что вы используете сервер example.com, и хотите проверить его сертификаты.

Для начала выполните команду openssl:

openssl s_client -connect example.com:443 -showcerts

Вы получите вывод, содержащий цепочку сертификатов. Обратите внимание на корневой сертификат и промежуточные сертификаты. Если какой-либо из них отсутствует, вам необходимо его получить.

Допустим, вы обнаружили, что промежуточный сертификат не установлен. Вам нужно будет его скачать и импортировать в ваше Java-хранилище сертификатов:

  1. Скачайте промежуточный сертификат, например intermediate.crt.
  2. Импортируйте его в хранилище Java:
keytool -import -alias intermediate_cert -file intermediate.crt -keystore $JAVA_HOME/lib/security/cacerts

После выполнения этих шагов, перезапустите ваше Java-приложение. Если все было сделано правильно, ошибка sun.security.validator.ValidatorException: PKIX path building failed должна исчезнуть, и вы сможете установить SSL-соединение без проблем.

СертификатСрок, издатель, домены (SAN)
ЦепочкаПроверка промежуточных и корневых CA
TLS-протоколВерсия TLS и набор шифров
УязвимостиHeartbleed, POODLE, слабые шифры

Почему нам доверяют

TLS 1.3
поддержка
Полная
цепочка CA
<2с
результат
30/14/7
дней до истечения

Как это работает

1

Введите домен

2

Проверка цепочки TLS

3

Дата истечения и уязвимости

Что проверяет SSL-тест?

SSL/TLS — протокол шифрования, который защищает данные между браузером и сервером. Наш инструмент анализирует сертификат, цепочку доверия, версию TLS и известныеуязвимости.

Детали сертификата

Издатель, срок действия, алгоритм подписи, покрываемые домены (SAN) и тип валидации (DV/OV/EV).

Цепочка доверия

Проверка полной цепочки: от конечного сертификата через промежуточные до корневого CA.

Анализ TLS

Версия протокола (TLS 1.2/1.3), набор шифров, поддержка Perfect Forward Secrecy (PFS).

Оповещения об истечении

Создайте монитор — получайте уведомления в Telegram и email за 30/14/7 дней до истечения.

DV vs OV vs EV сертификаты

DV (Domain Validation)
  • Подтверждение только владения доменом
  • Выдаётся за минуты автоматически
  • Бесплатно через Let's Encrypt
  • Подходит для большинства сайтов
  • Самый распространённый тип
OV / EV
  • Проверка организации (OV) или расширенная проверка (EV)
  • Выдаётся за 1-5 рабочих дней
  • Стоимость от $50 до $500/год
  • Для финансов, e-commerce, госсайтов
  • Повышает доверие пользователей

Кому это нужно

DevOps

мониторинг SSL-сертификатов

Безопасность

аудит TLS-конфигурации

SEO

HTTPS как фактор ранжирования

E-commerce

доверие покупателей

Частые ошибки

Истёкший сертификатБраузеры блокируют сайт с истёкшим SSL. Настройте автопродление или мониторинг.
Неполная цепочка сертификатовБез промежуточного CA некоторые браузеры и боты не смогут верифицировать сертификат.
Mixed content на HTTPS-сайтеHTTP-ресурсы на HTTPS-странице — замок в браузере пропадает, снижается доверие.
Использование TLS 1.0/1.1Устаревшие версии TLS содержат известные уязвимости. Используйте TLS 1.2+ или 1.3.
Несовпадение домена в сертификатеСертификат должен покрывать все домены сайта, включая www и поддомены.

Лучшие практики

Настройте автопродлениеLet's Encrypt + certbot с cron — сертификат обновляется автоматически каждые 60-90 дней.
Включите HSTSЗаголовок Strict-Transport-Security заставляет браузер всегда использовать HTTPS.
Используйте TLS 1.3TLS 1.3 быстрее (1-RTT handshake) и безопаснее — убраны устаревшие шифры.
Мониторьте срок действияСоздайте монитор на Enterno.io — получайте уведомления задолго до истечения.
Проверяйте цепочку после обновленияПосле обновления сертификата убедитесь, что промежуточные сертификаты установлены.

Получите больше с бесплатным аккаунтом

Мониторинг SSL-сертификатов, история проверок и уведомления за 30 дней до истечения.

Зарегистрироваться (FREE)

Больше по теме

Источники

Часто задаваемые вопросы

Как не править cacerts системный?

Скопировать в app-specific jks + -Djavax.net.ssl.trustStore. Обновление JDK не сбросит.

Self-signed dev/test?

Для dev: TrustManager который принимает всё. НЕ включать в prod код.

Maven / Gradle?

-Djavax.net.ssl.trustStore в MAVEN_OPTS / GRADLE_OPTS, или <jvmArgs> в build файлах.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.