Перейти к содержимому
ecdsa.com
Java (JSSE / PKIX)Java

Сообщение об ошибке

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

Также выводится как

  • javax.net.ssl.SSLException: (internal_error) Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
  • the trustAnchors parameter must be non-empty

JDK 25 сообщает об этом так: «javax.net.ssl.SSLException: (internal_error) Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty», а в цепочке причин — «java.lang.RuntimeException: Unexpected error: …». Если пути к хранилищу доверенных сертификатов вообще не существует, вместо этого выдаётся «PKIX path building failed».

Java (JSSE / PKIX) — the trust store the JVM loaded contains no trusted certificates

Что это означает

JVM загрузила хранилище доверенных сертификатов, в котором нет ни одной записи доверенного сертификата, поэтому у валидатора PKIX вообще нет якорей доверия и он отказывается работать. Это происходит ещё до проверки какого-либо сертификата: файл существует и открывается, но для доверия в TLS он пуст. Все HTTPS-соединения процесса завершаются такой же ошибкой.

Почему это происходит

Как исправить

  1. 1.

    Посчитайте доверенные записи

    keytool -list показывает записи; в хранилище доверенных сертификатов должны быть строки trustedCertEntry. Сравните с хранилищем JDK по умолчанию.

    bash
    # How many trusted certificates does the store hold? (0 reproduces this error)
    keytool -list -keystore "$TRUSTSTORE" -storepass "$TRUSTSTORE_PASSWORD" | grep -c trustedCertEntry
    keytool -list -cacerts -storepass changeit | grep -c trustedCertEntry    # the JDK's default store
  2. 2.

    Восстановите стандартное хранилище доверенных сертификатов JDK

    В Debian и Ubuntu переустановка ca-certificates-java заново создаёт /etc/ssl/certs/java/cacerts; в Alpine его устанавливает пакет java-cacerts.

    bash
    # Debian/Ubuntu OpenJDK packages build cacerts from the system CA bundle
    sudo apt-get install --reinstall ca-certificates-java
    sudo update-ca-certificates -f
    # Alpine
    apk add --no-cache java-cacerts
  3. 3.

    Разделяйте хранилище ключей и хранилище доверенных сертификатов

    Передавайте собственный сертификат и ключ через javax.net.ssl.keyStore, а сертификаты CA — через javax.net.ssl.trustStore.

    bash
    # Key store (your key + certificate) and trust store (CAs you trust) are different files
    java -Djavax.net.ssl.keyStore=client.p12   -Djavax.net.ssl.keyStorePassword=changeit \
         -Djavax.net.ssl.trustStore=truststore.p12 -Djavax.net.ssl.trustStorePassword=changeit -jar app.jar

Связанные ошибки

Открыть всю базу ошибок подписей