Pular para o conteúdo
ecdsa.com
Java (JSSE / PKIX)Java

Mensagem de erro

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

Também aparece como

  • 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

O JDK 25 informa o erro como “javax.net.ssl.SSLException: (internal_error) Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty”, com “java.lang.RuntimeException: Unexpected error: …” na cadeia de causas. Um caminho de trust store que nem existe gera, em vez disso, “PKIX path building failed”.

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

O que significa

A JVM carregou um trust store sem nenhuma entrada de certificado confiável, então o validador PKIX não tem nenhuma âncora de confiança e se recusa a iniciar. Isso acontece antes de qualquer certificado ser verificado: o arquivo existe e abre, mas está vazio para fins de confiança TLS. Todas as conexões HTTPS do processo falham da mesma forma.

Por que acontece

Como corrigir

  1. 1.

    Contar as entradas confiáveis

    O keytool -list mostra as entradas; um trust store precisa de linhas trustedCertEntry. Compare com o repositório padrão do 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.

    Restaurar o trust store padrão do JDK

    No Debian e no Ubuntu, reinstalar o ca-certificates-java gera de novo o /etc/ssl/certs/java/cacerts; no Alpine, quem o fornece é o pacote 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.

    Manter keystore e trust store separados

    Passe seu próprio certificado e sua chave em javax.net.ssl.keyStore, e os certificados de CA em 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

Erros relacionados

Ver toda a base de erros de assinatura