本文へスキップ
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 が読み込んだトラストストアに信頼済み証明書のエントリが 1 つもないため、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

関連するエラー

署名エラーデータベースをすべて見る