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

问题描述

在启动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.mfbz.cn/a/474232.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高压线下垂钓很危险!高压线下防垂钓智能语音警示杆:科技守护生命

初春时节&#xff0c;气温逐渐回升&#xff0c;在这阳光明媚的日子里&#xff0c;大批“捕鱼达人”纷纷开始行动&#xff0c;河边、池塘、水库……不放过任何一个垂钓点&#xff0c;甚至在高压线下&#xff0c;依旧自信甩杆&#xff0c;殊不知高压线下垂钓&#xff0c;轻则伤、…

聚类算法之层次聚类(Hierarchical Clustering)

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 层次聚类是一种非常独特和强大的聚类方法&#xff0c;与众多其他的聚类技术相比&#xff0c;它不仅为数据集提供了一个划分&#xff0c;还给出了…

鸿蒙APP应用开发教程—超详细的项目结构说明

1. 新建项目 打开DevEco Studio, 选择 Create Project: 1.1 选择模版 Create Project - Choose Template 1.2 配置项目 Create Project - Configure Project 如果使用的是 DevEco 3.X 版本, 可以根据 Compile SDK版本选择不同的模式, 比如: 3.0.0(API 8)及更早 - 仅支持 …

【数据结构】堆和树详解堆和二叉树的实现堆的top-k问题

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;数据结构_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.树概念及结构 1.1 树的概念 2.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用 2.二叉树的概念及结构 2.1 二叉树的概念…

力扣389周赛复盘

字符串及其反转中是否存在同一子字符串 class Solution {public boolean isSubstringPresent(String s) {StringBuilder sb new StringBuilder(s);String reverse sb.reverse().toString(); for (int i 0; i < s.length() - 2; i) { // 修改循环终止条件为 <&#xf…

matlab实现对全球不规则投影数据的投影转换

前几个专栏我们讨论了几个不规则的投影转换问题&#xff0c;有需要的可以阅读以下文章&#xff1a; matlab实现对极地投影数据的投影转换_matlab极地投影-CSDN博客 联合matlab和Arcgis进行netcdf格式的雪覆盖数据的重新投影栅格-CSDN博客 这次遇到的问题是一个墨卡托投影的数据…

【JavaWeb】Spring非阻塞通信 - Spring Reactive之WebFlux的使用

【JavaWeb】Spring非阻塞通信 - Spring Reactive之WebFlux的使用 文章目录 【JavaWeb】Spring非阻塞通信 - Spring Reactive之WebFlux的使用参考资料一、初识WebFlux1、什么是函数式编程1&#xff09;面向对象编程思维 VS 函数式编程思维&#xff08;封装、继承和多态描述事物间…

vue3新功能-Teleport

1.teleport 在组件内的任何位置渲染内容 将一个组件内部的一部分模板“传送”到该组件的 DOM 结构外层的位置去。 例:将组件dialog添加到body下面 <teleport to"body"> <el- dialog --> </teleport> 2.fragments 多个根元素外层不需要…

2024年了,还能学自动化吗?

大家都说2024年软件测试行业会卷的更厉害&#xff0c;简单的功能测试不再是入门的标准&#xff0c;那么2024年是否可以从自动化测试这块冲一把呢&#xff1f; 我们先来看看过去的一年自动化测试在测试行业中的发展分析&#xff1a; 01 市场需求增长 随着技术的进步和企业对软件…

爬虫入门系列-HTML基础语法

&#x1f308;个人主页&#xff1a;会编辑的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” HTML基础语法 bs4解析比较简单&#xff0c;但是呢&#xff0c;首先你需要了解一丢丢的html知识&#xff0c;然后再去使用bs4去提取&#xff0c;逻辑和编写难度就会非常简…

消息队列常见的两种消费模式

一、点对点模式 点对点模式&#xff1a;生产者发送消息到消息队列&#xff0c;消费者从消息队列中接收、处理消息&#xff0c;消息被消费后&#xff0c;就不在消息队列中了。每个消息只能由一个消费者接收和处理。如果有多个消费者监听同一个队列&#xff0c;消息将被发送到其…

刷题DAY29 | LeetCode 491-递增子序列 46-全排列 47-全排列 II

491 递增子序列&#xff08;medium&#xff09; 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素&#xff0c;如出现两个整数相等&#xff0c;也…

流畅的 Python 第二版(GPT 重译)(五)

第九章. 装饰器和闭包 有人对将这个功能命名为“装饰器”的选择提出了一些抱怨。主要的抱怨是该名称与其在 GoF 书中的用法不一致。 名称 decorator 可能更多地归因于其在编译器领域的用法—语法树被遍历并注释。 PEP 318—函数和方法的装饰器 函数装饰器让我们在源代码中“标记…

外包干了14天,技术退步明显。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;2019年我通过校招踏入了成都一家软件公司&#xff0c;开始了我的职业生涯。那时的我&#xff0c;满怀热血和憧憬&#xff0c;期待着在这个行业中闯出一片天地。然而&#xff0c;随着时间的推移&#xff0c;我发现自己逐渐陷入…

NVIDIA Chat with RTX教程使用以及CUDA和CUDNN

基本环境安装&#xff1a;CUDA12.1CUDNNcudnn-windows-x86_64-8.9.7.29_cuda12-archive 1、CUDA下载 CUDA官方安装教程: https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html CUDA Toolkit的下载: CUDA Toolkit 12.1 Downloads | NVIDIA Dev…

Vue.js+SpringBoot开发高校宿舍调配管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能需求2.1 学生端2.2 宿管2.3 老师端 三、系统展示四、核心代码4.1 查询单条个人习惯4.2 查询我的室友4.3 查询宿舍4.4 查询指定性别全部宿舍4.5 初次分配宿舍 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的…

如何读懂Java GC日志

Java应用程序的GC日志对分析定位很多性能问题有着非常大的帮助。默认情况下&#xff0c;Java应用程序不会自动产生GC日志。如果需要输出GC日志&#xff0c;必须在JVM启动时增加对应的参数&#xff0c;场景的参数如表5-8所示。 2. GC日志分析一 例如&#xff0c;在Tomcat的JVM启…

【Spring Cloud】微服务注册中心的工作原理

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;人生乏味啊&#xff0c;我欲令之光怪陆离 本文封面由 凯楠&#x1f4f7; 友情提供&#xff01; 目录 前言 1. 注册中心的主要作用 2. 常见的注册中心 3. Nacos 服务注册和发…

护眼大路灯哪个更适合学生?大路灯购选分享,经验总结!

在当前开节奏的生活领域中&#xff0c;作为测评师我观察到&#xff0c;大路灯作为一种新型照明的补光工具&#xff0c;逐渐被越来越多的人融入家庭生活中。这种设备无疑为用眼人群带来了显著的好处。但许多用户反馈中也频繁提及平时是眼睛疲劳感越来越严重等副情况&#xff0c;…

Java 学习和实践笔记(42):内部类(inner class)

内部类的两个要点: 1&#xff09;内部类提供了更好的封装。只能让外部类直接访问&#xff0c;不允许同一个包中的其他类直 接访问。 2&#xff09;内部类可以直接访问外部类的私有属性&#xff0c;内部类被当成其外部类的成员。但外部类 不能访问内部类的内部属性。| 注意&…