SSLHandshakeException による接続の失敗
症状:
SSLHandshakeException
はノードへの接続を失敗させ、構成に問題があることを示します。一般的な例外のいくつかは以下に示されており、これらの問題を解決するためのヒントがあります。
解決策:
java.security.cert.CertificateException: No name matching node01.example.com found
- クライアント接続が
node01.example.com
に対して行われましたが、返された証明書にはnode01.example.com
という名前が含まれていませんでした。ほとんどの場合、この問題は証明書作成時に名前が指定されていることを確認することで解決できます。詳細については、TLSを使用してノード間通信を暗号化するを参照してください。別のシナリオは、環境が証明書にDNS名を全く使用したくない場合です。このシナリオでは、elasticsearch.yml
のすべての設定は、network.publish_host
設定を含め、IPアドレスのみを使用する必要があります。 java.security.cert.CertificateException: No subject alternative names present
- クライアント接続がIPアドレスに対して行われましたが、返された証明書には
SubjectAlternativeName
エントリが含まれていませんでした。IPアドレスは、証明書作成時にSubjectAlternativeName
として指定されている場合にのみ、ホスト名の検証に使用されます。ホスト名の検証にIPアドレスを使用する意図があった場合、適切なIPアドレスで証明書を再生成する必要があります。詳細については、TLSを使用してノード間通信を暗号化するを参照してください。 javax.net.ssl.SSLHandshakeException: null cert chain
とjavax.net.ssl.SSLException: Received fatal alert: bad_certificate
SSLHandshakeException
は、クライアントによって返された自己署名証明書が信頼されていないことを示します。これはtruststore
またはkeystore
に見つからないためです。このSSLException
は接続のクライアント側で見られます。sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
とjavax.net.ssl.SSLException: Received fatal alert: certificate_unknown
- この
SunCertPathBuilderException
は、ハンドシェイク中に返された証明書が信頼されていないことを示します。このメッセージは接続のクライアント側で見られます。SSLException
は接続のサーバー側で見られます。返された証明書に署名したCA証明書はkeystore
またはtruststore
に見つからず、この証明書を信頼するために追加する必要があります。 javax.net.ssl.SSLHandshakeException: Invalid ECDH ServerKeyExchange signature
Invalid ECDH ServerKeyExchange signature
は、キーと対応する証明書が一致せず、ハンドシェイクの失敗を引き起こしていることを示す場合があります。構成された証明書機関、証明書、およびキーに使用している各ファイルの内容を確認してください。特に、キーと証明書が同じキー ペアに属していることを確認してください。