Elasticsearch 7.4.2更新SSL证书后节点无法加入集群求助
问题描述
我有一个运行3年的Elasticsearch 7.4.2集群,执行GET _ssl/certificates查询发现证书过期时间为"expiry" : "2022-11-20T07:27:29.000Z"。在/usr/share/elasticsearch目录下,我通过以下步骤生成新证书:
- 生成新
temescls01-ca.p12证书:执行./bin/elasticsearch-certutil cert --ca /etc/elasticsearch/certs/temescls01-ca.p12并输入旧CA证书密码。 - 生成新
temescls01-certificates.p12证书:执行./bin/elasticsearch-certutil cert /etc/elasticsearch/certs/temescls01-certificates.p12并输入旧密钥库密码。
新证书均使用旧证书的密码,生成成功后,我按照官方文档替换旧证书并重启Elasticsearch服务,但节点无法加入集群;换回旧证书则恢复正常。以下是elasticsearch.yml相关配置:
xpack.security.enabled: true xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: certs/temescls01-certificates.p12 xpack.security.transport.ssl.keystore.password: XXXXXXXXX xpack.security.transport.ssl.truestore.path: certs/temescls01-certificates.p12 xpack.security.transport.ssl.truestore.password: XXXXXXXXX
请问我操作过程中哪里出现了错误?
错误分析与解决方案
1. 配置文件拼写错误
你的elasticsearch.yml存在致命拼写错误:truestore应为truststore(缺少字母s)。这个错误会导致Elasticsearch无法正确加载信任库,节点间SSL握手失败,直接引发集群加入失败。
修正后的配置项应为:
xpack.security.transport.ssl.truststore.path: certs/temescls01-certificates.p12 xpack.security.transport.ssl.truststore.password: XXXXXXXXX
2. 证书生成流程错误
你的证书生成步骤有两处核心问题:
- 混淆CA证书与节点证书生成逻辑:你执行的
./bin/elasticsearch-certutil cert --ca 旧CA命令是基于原CA签发新节点证书,而非生成新CA。但你将输出文件命名为temescls01-ca.p12,混淆了CA证书和节点证书的用途,后续替换时会破坏信任链。 - 节点证书生成命令错误:第二步执行的
./bin/elasticsearch-certutil cert /etc/elasticsearch/certs/temescls01-certificates.p12完全错误——该命令的合法参数是CA证书路径或配置文件,直接传入旧节点证书无法生成CA签发的有效节点证书。正确的节点证书生成命令应为:
执行时输入原CA密码,设置与旧证书一致的节点证书密码,生成的文件才是合法的节点证书。./bin/elasticsearch-certutil cert --ca /etc/elasticsearch/certs/temescls01-ca.p12
3. 集群证书替换一致性问题
- 必须确保所有集群节点都替换了新的节点证书,且每个节点的
elasticsearch.yml配置中的证书路径、密码完全一致。仅替换部分节点会导致未替换节点无法验证新节点的证书,从而拒绝其加入集群。 - 若你确实重新生成了CA证书,需要将新CA证书导入所有节点的信任库(或直接将新CA包含在节点证书的p12文件中),否则节点间无法建立信任关系。
内容的提问来源于stack exchange,提问作者Sareg
相关产品推荐
相关产品推荐

