本文へスキップ
ecdsa.com
Java (JSSE HostnameChecker)Java

エラーメッセージ

No subject alternative names matching IP address 127.0.0.1 found

別の表記

  • java.security.cert.CertificateException: No subject alternative names matching IP address 127.0.0.1 found

アドレスは URL に含まれていたものです。JDK 21 以降では、例外のテキストの先頭に「(certificate_unknown) 」が付きます。DNS のホスト名の場合、メッセージは「No subject alternative DNS name matching <host> found.」です。

Java (JSSE HostnameChecker) — URL host is an IP address that is not an IP SAN of the certificate

このエラーの意味

URL のホストが IP アドレスですが、証明書のサブジェクト代替名拡張には、そのアドレスと一致する IP アドレスのエントリがありません。Java は(RFC 6125 に従い)IP アドレスを IP SAN エントリとだけ比較します。DNS 名やコモンネームがアドレスと一致することはありません。

発生する理由

修正方法

  1. 1.

    証明書に記載された DNS 名で接続する

    ホスト名を使い、それを必要なアドレスに名前解決してください。そうすれば、ホスト名の検証は成功します。

    bash
    # Use the DNS name from the certificate; map it to the IP where needed
    echo "10.0.0.5 api.example.com" | sudo tee -a /etc/hosts
    curl -sI https://api.example.com/
  2. 2.

    IP SAN を含めて証明書を発行する

    クライアントがアドレスを使わなければならない場合は、IP エントリとして追加してください(パブリック CA がこうした証明書を発行することはまれですが、プライベート CA なら発行できます)。

    bash
    # Or issue the certificate with the IP address as an IP SAN entry
    openssl req -new -key server.key -out server.csr -subj "/CN=api.example.com" \
      -addext "subjectAltName=DNS:api.example.com,IP:10.0.0.5"
    keytool -certreq -alias server -keystore server.p12 -ext "SAN=dns:api.example.com,ip:10.0.0.5" -file server.csr

関連するエラー

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