SSLHandshakeException 导致连接失败
编辑SSLHandshakeException 导致连接失败编辑
症状
SSLHandshakeException
导致与节点的连接失败,并表明存在配置问题。下面列出了一些常见的异常,以及如何解决这些问题的提示。
解决方案
-
java.security.cert.CertificateException: 未找到与 node01.example.com 匹配的名称
-
表明客户端连接已建立到
node01.example.com
,但返回的证书不包含名称node01.example.com
。在大多数情况下,可以通过确保在证书创建期间指定名称来解决此问题。有关更多信息,请参阅 使用 TLS 加密节点间通信。另一种情况是,环境根本不希望在证书中使用 DNS 名称。在这种情况下,elasticsearch.yml
中的所有设置都应仅使用 IP 地址,包括network.publish_host
设置。 -
java.security.cert.CertificateException: 没有主体备用名称
-
表明客户端连接已建立到 IP 地址,但返回的证书不包含任何
SubjectAlternativeName
条目。仅当在证书创建期间将 IP 地址指定为SubjectAlternativeName
时,才会使用 IP 地址进行主机名验证。如果意图是使用 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
可能表明密钥和相应的证书不匹配,导致握手失败。验证用于配置证书颁发机构、证书和密钥的每个文件的內容。特别是,检查密钥和证书是否属于同一个密钥对。