SSLHandshakeException 导致连接失败

编辑

症状

  • SSLHandshakeException 导致与节点的连接失败,表明存在配置问题。下面列出了一些常见的异常以及如何解决这些问题的提示。

解决方法

java.security.cert.CertificateException: No name matching node01.example.com found

表明客户端连接到 node01.example.com,但返回的证书不包含名称 node01.example.com。在大多数情况下,可以通过确保在证书创建期间指定名称来解决该问题。有关更多信息,请参阅使用 TLS 加密节点间通信。另一种情况是环境不希望在证书中使用 DNS 名称。在这种情况下,elasticsearch.yml 中的所有设置都应仅使用 IP 地址,包括 network.publish_host 设置。

java.security.cert.CertificateException: No subject alternative names present

表明客户端连接到 IP 地址,但返回的证书不包含任何 SubjectAlternativeName 条目。仅当 IP 地址在证书创建期间被指定为 SubjectAlternativeName 时,才用于主机名验证。如果意图是将 IP 地址用于主机名验证,则需要使用适当的 IP 地址重新生成证书。请参阅使用 TLS 加密节点间通信

javax.net.ssl.SSLHandshakeException: null cert chainjavax.net.ssl.SSLException: Received fatal alert: bad_certificate

SSLHandshakeException 表明客户端返回了自签名证书,由于在 truststorekeystore 中找不到该证书,因此不受信任。此 SSLException 出现在连接的客户端。

sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetjavax.net.ssl.SSLException: Received fatal alert: certificate_unknown

SunCertPathBuilderException 表明在握手期间返回了不受信任的证书。此消息出现在连接的客户端。 SSLException 出现在连接的服务器端。签署返回证书的 CA 证书在 keystoretruststore 中未找到,需要将其添加以信任此证书。

javax.net.ssl.SSLHandshakeException: Invalid ECDH ServerKeyExchange signature

Invalid ECDH ServerKeyExchange signature 可能表明密钥和相应的证书不匹配,导致握手失败。验证用于配置的证书颁发机构、证书和密钥的每个文件的内容。特别是,检查密钥和证书是否属于同一密钥对。