ES集群不识别节点SSL证书的问题处理

news2024/9/23 5:15:47

问题描述

在启动ES服务并试图加入其他节点上已启动的集群时,出现报错(原文是一大段话,我按语义拆成了几段):

[2024-03-19T16:32:02,844][WARN ][o.e.c.s.DiagnosticTrustManager] [node-2-master] failed to establish trust with server at [<unknown host>]; the server provided a certificate with subject name [CN=workerxx], fingerprint [85e5xxx], no keyUsage and extendedKeyUsage [serverAuth];

the certificate is valid between [2024-03-19T02:34:51Z] and [2026-03-19T02:34:51Z] (current time is [2024-03-19T08:32:02.843439860Z], certificate dates are valid);

the session uses cipher suite [TLS_AES_256_GCM_SHA384] and protocol [TLSv1.3]; the certificate has subject alternative names [DNS:localhost,IP:fe80:0:0:0:xxxx:xx:dfc5:1816,IP:192.xx.xx.xxx,IP:0:0:0:0:0:0:0:1,IP:127.0.0.1,IP:fe80:0:0:0:503:d573:42c0:8add,IP:10.xx.xx.xx,DNS:workerxx];

the certificate is issued by [CN=Elasticsearch security auto-configuration HTTP CA]; the certificate is signed by (subject [CN=Elasticsearch security auto-configuration HTTP CA] fingerprint [0439xxx]) which is self-issued;

the [CN=Elasticsearch security auto-configuration HTTP CA] certificate is not trusted in this ssl context ([xpack.security.transport.ssl (with trust configuration: StoreTrustConfig{path=certs/transport.p12, password=<non-empty>, type=PKCS12, algorithm=PKIX})]);

这段日志警告来自Elasticsearch节点node-2-node2,显示它未能与服务器建立信任连接,具体服务器地址为<unknown host>。服务器提供的证书包含如下信息:

  • 主题名称:CN=workerxx
  • 指纹
  • 该证书没有指定keyUsage和extendedKeyUsage的serverAuth属性
  • 证书日期有效
  • 会话使用的加密套件:TLS_AES_256_GCM_SHA384,协议:TLSv1.3
  • 证书包含了多个主题备用名称(Subject Alternative Names, SANs),包括localhost和其他几个IP地址以及DNS名称workerxx
  • 证书由名为CN=Elasticsearch security auto-configuration HTTP CA的机构颁发
  • 签名证书同样是自签发的(self-issued)

问题分析

日志显示,在Elasticsearch节点node-2-master上出现了SSL握手失败的情况,原因是该节点未能与目标服务器建立信任关系。具体错误是:

当前Elasticsearch节点的SSL上下文(xpack.security.transport.ssl)信任的证书主体也是CN=Elasticsearch security auto-configuration HTTP CA,但已信任的证书指纹与服务器提供的不一致,造成信任链校验失败。

为了解决这个问题,需要采取以下步骤:

  1. 确认节点node-2-master上的SSL配置文件(在这个例子中是certs/transport.p12)是否包含正确的、应该被信任的证书及其链。目前,节点信任的证书指纹是c7bd...,而服务器提供的证书指纹是85e5...

  2. 更新Elasticsearch节点上的信任证书存储以包含正确的CA证书和服务器证书,确保它们能形成有效的信任链。

  3. 检查并确保所有节点间通信使用的都是同一个信任根CA,并且证书链完整无误。

  4. 对于Elasticsearch的安全性配置,尤其是xpack.security.transport.ssl的部分,应确保所有的节点都有相同且正确的信任设置。

但是,这些证书都是自动生成且直接拷贝到其他节点的,并未进行任何修改。并且还有一个现象就是,与master在同一台机器上的ES实例与其通信时是正常的,不过这也可以推测相同机器用的是本地回环地址进行的通信,故信任链在证书中是生效的。

排查与解决

指纹相关?

尝试使用ssh登录远程节点,并记录远程节点的指纹(询问时回答yes),再次尝试无效。

hosts文件记录错误?

由于我的机器是由两个不同网段接通的,一个千兆,一个万兆,故将本地的/etc/hosts文件中的改为配置文件中填写的千兆IP地址,报错相同。

证书文件损坏?

由于本机器的文件都是从其他节点拷贝来的,可能出现损坏,故重新检查和拷贝一遍后问题依然存在。

重新生成ssl证书并分发?

我重新解压开一个编译包,让它自动生成一份http、Transport的p12证书,然后覆盖到所有需要的节点,结果本地节点仍然可以正常启动组成集群,但是另一个机器还是无法通过信任链校验,无法通信,至此,问题有点陷入僵局的意思。

采用token方案进行观察(解决)

翻看之前搭建集群的记录,似乎不能直接把证书拷贝过去使用。由于之前是采用的token的方案,没有过多配置,我先清空远程节点的discovery相关属性,使用token的方案加入集群观察一下。

主节点先生成token:

./bin/elasticsearch-create-enrollment-token -s node

使用指定token的方式加入集群非常顺利,几乎是秒过!

./bin/elasticsearch -d --enrollment-token eyJ2ZXIiOi...

执行上述命令后节点启动正常,并立即识别了远程master节点,顺利加入集群。

这种方案只修改了以下三个配置:

cluster.name: my-app-es
node.name: node-2-master
node.roles: [master,ingest]

需要注意的是,这个服务由于我指定的是master角色,所以没有指定任何端口。

data节点指定端口的尝试

前面新增了一个master角色,现在尝试增加一个data角色。

修改配置:

cluster.name: my-app-es
node.name: node-2-node1
node.roles: [ data, ingest ]
http.port: 9201
transport.port: 9301

之后启动命令与前述相同,节点也顺利加入了集群。

正常情况的总结

观察上述两个过程,启动前certs目录是没有的,启动后自动生成了证书,并且配置自动修改好,显然这个证书就是本地可用的。

拷贝证书再测试

# 从node1拷贝证书到node2,覆盖node2
cp -r node1/config/certs/ node2/config/
cp  node1/config/elasticsearch.keystore node2/config

# 修改node2的配置,主要是增加发现信息,修改端口
cd node2/config/
vim config/elasticsearch.yml

rm -rf data/*
rm -rf logs/*

# 非token方式启动
./bin/elasticsearch -d

这样也是启动成功的,最终集群从3节点变成6个节点了(2主4数),如下图:

总结

所以,绕了一圈SSL证书仅需要在本地生成,踩这个坑主要是由于ES 8.x版本将证书生成进行了自动化(对用户透明了),所以忽略了这一点。这个举措本身是简化用户操作的,因此,建议使用指定token的方式组建集群,不要手动配置证书了。

另外,每个ES节点配置中的发现信息(discovery.seed_hosts)随着加入集群的顺序而改变,后加入的节点会自动添加前面已在集群内的节点信息,但是手动启动的不会自己变更。最后集群的节点配置各不相同,全部重启也不会同步该信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1536501.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宏璇物流邀您参观2024快递物流供应链与技术装备展览会

展会介绍 ESYE CHINA 2024快递物流展是亚洲范围内超大规模的快递物流业展示平台&#xff0c;由于展会的需求及扩大市场的影响力&#xff0c;ESYE 2024转战杭州&#xff0c;凭借着先进的经济发展水平、优越的地理位置、成熟的产业环境以及巨大的电商、微商、零售业、消费的市场…

云手机为电商提供五大出海优势

出海电商行业中&#xff0c;各大电商平台的账号安全是每一个电商运营者的重中之重&#xff0c;账号安全是第一生产力&#xff0c;也是店铺运营的基础。因此多平台多账号的防关联管理工具成了所有电商大卖家的必备工具。云手机最核心的优势就是账户安全体系&#xff0c;本文将对…

ky10.aarch64安装Jenkins

参考地址&#xff1a;《安装部署 Jenkins》 前言 有war包和rpm两种安装方式&#xff0c;如果是长期使用更加推荐rpm的安装方式&#xff0c;可以更好的管理Jenkins&#xff1b; 我此次安装jenkins主要用于测试和简单的个人使用&#xff0c;所以选择更轻便的war安装。 1 下载J…

【C#】C#窗体应用修改窗体的标题和图标

修改窗体顶部的标题和图表&#xff0c;如果不修改则会使用默认的图标&#xff0c;标题默认为Form1&#xff0c;如第一张图&#xff0c;这时候如果想换成和系统有关的内容&#xff0c;如第二张图&#xff0c;可以使用下面的方法进行修改&#xff0c;修改后打开该软件任务栏显示的…

【yaml包如何安装】

【yaml包如何安装】 安装yaml包&#xff08;也称为pyyaml&#xff09; &#xff0c;可以直接使用如下述命令 pip install pyyaml

LeetCode - 存在重复元素

219. 存在重复元素 II 这道题可以用两个方法解决。 哈希表 从左到右遍历数组&#xff0c;并将数组的下标存到hash中&#xff0c;在遍历数字的过程中&#xff0c;如果hash中不存在nums[i]&#xff0c;将nums[i]加入到hash当中&#xff0c;若存在&#xff0c;则判断下标之间的关…

【算法】数组-移除元素

给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并原地修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的…

Java的IO之BIO

Java IO流是用于处理输入和输出的机制&#xff0c;用于读取和写入数据。Java提供了丰富的IO类和接口&#xff0c;用于处理不同类型的数据和操作。Java中的IO模型主要分为BIO和NIO两种&#xff0c;他们可以分别被视为IO编程的不同风格或模式&#xff0c;并非IO流具体的类型&…

云计算2主从数据库

设置主从数据库的目的是将数据库1和数据库2分别建在两个虚拟机上&#xff0c;并实现数据互通访问 首先准备两个虚拟机&#xff0c;这里示例ip分别为&#xff1a; 192.168.200.10&#xff1b;192.168.200.20 修改主机名&#xff0c;一个是mysql1&#xff0c;一个是mysql2&#x…

除了Confluence,还有哪些好用的知识库平台

大家都知道&#xff0c;Confluence作为知识库平台界的佼佼者&#xff0c;确实给我们带来了不少便利。但好东西总是层出不穷&#xff0c;除了Confluence&#xff0c;市面上还有其他好用的知识库平台也值得我们去尝试。今天&#xff0c;我就给大家聊聊我个人用过并且觉得挺不错的…

Vue+Element UI 开发PC端页面,出现页面抖动原因及解决办法

问题描述&#xff1a; 页面 拖动 放大放小&#xff0c;出现页面抖动&#xff0c;屏幕不停闪动 解决方案&#xff1a; 1.找到相对应的页面的div 加上样式&#xff1a; .app-container {height: 100%;overflow: auto;margin: 0; //加上这个把滚动条隐藏掉&#xff0c;否则就…

PHP页面如何实现设置独立访问密码

PHP网页如果需要查看信息必须输入密码&#xff0c;验证后才可显示出内容的代码如何实现&#xff1f; 对某些php页面设置单独的访问密码,如果密码不正确则无法查看内容,相当于对页面进行了一个加密。 如何实现这个效果&#xff0c;详细教程可以参考&#xff1a;PHP页面如何实现…

香港科技大学(广州)先进材料学域可持续能源与环境学域智能制造学域博士招生宣讲会——北京专场(暨全额奖学金政策)

三个学域代表教授亲临现场&#xff0c;面对面答疑解惑助攻申请&#xff01;可带简历现场咨询和面试&#xff01; &#x1f4b0;一经录取&#xff0c;享全额奖学金1.5万/月&#xff01; 报名链接&#xff1a; https://www.wjx.top/vm/wF2Mant.aspx# 地点&#xff1a;中关村皇冠…

【免费】如何考取《鲸鸿动能广告初级优化师》认证(详细教程)

鲸鸿动能广告初级优化师认证考试PC网址 初级&#xff1a;鲸鸿动能广告初级优化师认证-华为开发者学堂 (huawei.com) 注&#xff1a;免费认证&#xff0c;里面包含免费的课程&#xff0c;浏览器用Edge。 文章目录 鲸鸿动能广告初级优化师认证考试网址 前言 一、备考流程 二…

C++ Qt开发:QProcess进程管理模块

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍如何运用QProcess组件实现针对进程的控制管理…

“找不到msvcr100.dll”或“msvcr100.dll丢失”的多种解决方法分享

当计算机系统中msvcr100.dll文件发生丢失时&#xff0c;导致某些应用程序无法正常运行。msvcr100.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;对于许多基于Windows操作系统的应用程序正常运行至关重要。小编将介绍5种解决msvcr100.dll丢失问题的方法…

由于找不到vcruntime140.dll无法继续执行

如果你发现在Windows操作系统中缺少vcruntime140.dll文件&#xff0c;可能会对你打开某些应用程序或媒体文件造成困扰。在本文中&#xff0c;我们将介绍vcruntime140.dll是什么及其作用&#xff0c;以及缺失该文件时可能会遇到的问题。同时&#xff0c;我们还将探讨解决此问题的…

低代码开发平台开源:依靠科技力量实现数字化转型!

在竞争激烈的当今社会&#xff0c;数字化转型、流程化办公等字眼早已充斥在我们的职场生活中。虽然如此&#xff0c;但是我们依然要面临着这样一个现实问题&#xff1a;很多中小企业发展面临着资源有限、技术储备不足、人才短缺的现实问题&#xff0c;进入流程化办公困境依然明…

huggingface的transformers训练gpt

目录 1.原理 2.安装 3.运行 ​编辑 4.数据集 ​编辑 4.代码 4.1 model init​编辑 forward&#xff1a; 总结&#xff1a; 关于loss和因果语言模型&#xff1a; ​编辑 交叉熵&#xff1a;​编辑 记录一下transformers库训练gpt的过程。 transformers/examples/…

【每日一问】IOS手机上Charles证书过期怎么办?

1、如何查看证书是否过期? 设置>通用>VPN与设备管理 2、在Charles中重置证书 步骤1&#xff1a;重置证书 Help>SSL Proxying>Reset Charles Root Certificate… 步骤2&#xff1a;在浏览器中&#xff0c;下载证书 首先&#xff0c;手机连上代理&#xff0c;然…