You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch跨节点握手空证书链问题(不同节点证书不同)

双节点Elasticsearch集群跨节点SSL握手错误:Empty client certificate chain

问题场景

双节点Elasticsearch集群配置了X-Pack SSL,核心配置如下:

xpack.security.enabled: true
xpack.security.http.ssl.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: "certificate"
xpack.security.transport.ssl.keystore.path: "application.keystore"
xpack.security.http.ssl.verification_mode: "certificate"
xpack.security.http.ssl.keystore.path: "application.keystore"
xpack.security.transport.ssl.truststore.path: "client.truststore"
xpack.security.transport.ssl.truststore.password: "pass"
xpack.security.transport.ssl.keystore.password: "pass"
xpack.security.http.ssl.keystore.password: "pass"
xpack.security.transport.ssl.keystore.key_password: "pass"
xpack.security.http.ssl.keystore.key_password: "pass"

每个节点使用CA签名的独立证书,且已将对方证书加入各自信任库,但跨节点通信时抛出错误:

javax.net.ssl|SEVERE|B1|elasticsearch[node][transport_worker][T#66]|2023-05-02 15:08:56.928 UTC|TransportContext.java:316|Fatal (BAD_CERTIFICATE): Empty client certificate chain ( [2023-05-02T15:08:56,928][WARN ][stderr ] [node-mdtwnmst01ap02] "throwable" : { [2023-05-02T15:08:56,928][WARN ][stderr ] [node-mdtwnmst01ap02] javax.net.ssl.SSLHandshakeException: Empty client certificate chain [2023-05-02T15:08:56,928][WARN ][stderr ] [node-mdtwnmst01ap02] at sun.security.ssl.Alert.createSSLException(Alert.java:131) [2023-05-02T15:08:56,928][WARN ][stderr ] [node-mdtwnmst01ap02] at sun.security.ssl.Alert.createSSLException(Alert.java:117) [2023-05-02T15:08:56,928][WARN ][stderr ] [node-mdtwnmst01ap02] at sun.security.ssl.TransportContext.fatal(TransportContext.java:311) [2023-05-02T15:08:56,928][WARN ][stderr ] [node-mdtwnmst01ap02] at sun.security.ssl.TransportContext.fatal(TransportContext.java:267) [2023-05-02T15:08:56,928][WARN ][stderr ] [node-mdtwnmst01ap02] at sun.security.ssl.TransportContext.fatal(TransportContext.java:258) [2023-05-02T15:08:56,928][WARN ][stderr ] [node-mdtwnmst01ap02] at sun.security.ssl.CertificateMessage$T13CertificateConsumer.onConsumeCertificate(CertificateMessage.java:1193)

SSL调试显示:服务器端发送证书后,客户端能在信任库中找到对应证书,但返回空证书链。

触发条件:仅在使用不同CA签名证书+配置独立信任库时出现;单证书无信任库、单证书链(自签/无中间CA的CA签证书)场景下正常。

排查与解决步骤

1. 验证Keystore的完整证书链

每个节点的application.keystore必须包含节点证书+CA根证书的完整链,否则客户端无法构建有效证书链发送。用以下命令检查:

keytool -list -v -keystore application.keystore

如果缺少CA根证书,执行导入:

keytool -importcert -alias ca-root -file ca.crt -keystore application.keystore -storepass pass

2. 确保信任库与密钥库的证书一致性

将CA根证书同时导入双方节点的client.truststore和application.keystore,保证双向SSL认证时,双方既能验证对方证书,也能提供自身完整的证书链。

3. 检查密钥库的私钥条目有效性

确认Keystore中的节点证书私钥条目完整无损坏,导出证书验证:

keytool -exportcert -alias <节点证书别名> -file node.crt -keystore application.keystore -storepass pass

将导出的证书导入对方节点的信任库,检查是否存在:

keytool -list -v -keystore client.truststore | grep <节点证书别名>

4. 核对节点SSL配置对称性

两个节点的Transport SSL配置需完全对称,除Keystore路径(若使用不同文件名),其他参数如密码、验证模式、Truststore路径必须一致。

5. 调整SSL验证模式(可选)

当前verification_mode: "certificate"仅验证证书有效性,若证书CN/SAN与节点主机名匹配,可尝试切换为full模式,强制主机名验证,排除证书与节点身份不匹配的问题:

xpack.security.transport.ssl.verification_mode: "full"

内容的提问来源于stack exchange,提问作者Diana Mihutescu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 10:15:01