Elasticsearch 8.4.1 配置自签名证书和启用Https

news2025/7/14 2:07:06

一、背景

某次安全扫描过程中,发现环境存在【SSL证书不可信】和【SSL自签名证书】漏洞;漏洞描述:

此服务的X.509证书链未由认可的证书颁发机构签名。如果远程主机是生产中的公共主机,这将取消SSL的使用,因为任何人都可以对远程主机建立中间人攻击。

无法信任服务器的X.509证书。这种情况可能以三种不同的方式出现,在这种情况下,信任链可能会断开,如下所述:-首先,服务器发送的证书链的顶部可能不是已知的公共证书颁发机构的后代。如果链的顶部是无法识别的自签名证书,或者缺少将证书链的顶部连接到已知公共证书颁发机构的中间证书,则可能会发生这种情况。-其次,证书链可能包含扫描时无效的证书。当扫描发生在证书的“notBefore”日期之一之前或证书的“notAfter”日期之一之后时,可能会发生这种情况。-第三,证书链可能包含与证书信息不匹配或无法验证的签名。错误的签名可以通过使具有错误签名的证书由其颁发者重新签名来修复。无法验证的签名是证书颁发者使用Nessus不支持或不识别的签名算法的结果。如果远程主机是生产中的公共主机,则链中的任何中断都会增加用户验证web服务器的真实性和身份的难度。这样可以更容易地对远程主机执行中间人攻击。

涉及主机:ES的9200端口;版本:Elasticserach 8.4.1;Kibana:8.4.1

修复建议:购买或生成此服务的正确SSL证书。

二、配置自签名证书和启用HTTPS

1)配置使用自签名证书

注意:如果已有单节点es,想要将其转换升级为集群,必须要删除/data下的node数据,即清空data中的信息;配置证书仅在集群的第一台服务器node-01执行即可,其他服务器直接复制;elasticsearch生成证书有两种方式,elasticsearch-certgen 方式和elasticsearch-certutil方式,其中,第一种方式如果以后新增节点导致证书得重新生成并放到es所有节点,一般我们使用第2种;如下所示:
在这里插入图片描述
在这里插入图片描述

# 第一种方式
./elasticsearch-certgen
……
Let's get started...

Please enter the desired output file [certificate-bundle.zip]: cert.zip  (需要输入生成的压缩包名称)
Enter instance name: my-application(需要输入实例名)
Enter name for directories and files [p4mES]: elasticsearch(需要输入文件夹名)
Enter IP Addresses for instance (comma-separated if more than one) []: 127.0.0.1  (实例ip,多个ip用逗号隔开,输入集群所有节点的IP)
Enter DNS names for instance (comma-separated if more than one) []: node-1(节点名,多个节点用逗号隔开,输入所有的节点名称)
Would you like to specify another instance? Press 'y' to continue entering instance information: 
Certificates written to /usr/local/elasticsearch/bin/cert.zip(这个是生成的文件存放地址,不用填写,在哪个目录下执行elasticsearch-certgen就会生成在哪个目录,不要在/usr/local/elasticsearch/bin下执行elasticsearch-certgen,否则你上面需要填写文件夹时不能写elasticsearch,因为解压时和elasticsearch命令冲突)

This file should be properly secured as it contains the private keys for all
instances and the certificate authority.

After unzipping the file, there will be a directory for each instance containing
the certificate and private key. Copy the certificate, key, and CA certificate
to the configuration directory of the Elastic product that they will be used for
and follow the SSL configuration instructions in the product guide.

For client applications, you may only need to copy the CA certificate and
configure the client to trust this certificate.

#把生成的zip包解压,将里面的ca.crt、ca.key、elasticsearch.crt、elasticsearch.key放到/usr/local/elasticsearch/config目录下,然后修改elasticsearch.yml添加以下内容:


#本处采用通过的elasticsearch-certutil方式
cd /usr/local/elasticsearch-8.4.1/bin
#签发ca证书:输入证书文件名、密码,一般我们直接回车就行,命令执行完后,会在elasticsearch-8.4.1目录下生成一个ca证书:elastic-stack-ca.p12
./elasticsearch-certutil ca  //如果全默认的,会生成elastic-stack-ca.p12文件
./bin/elasticsearch-certutil ca --pem --out ca.zip --days 36500 -s  ## 会生成ca.zip文件
unzip ca.zip  //解压后有2个文件
openssl x509 -in ca/ca.crt -noout -dates    ## 查看证书有效期,输出如下
notBefore=Nov  25 02:15:46 2022 GMT
notAfter=Nov 1 02:15:46 2122 GMT
#生成第二个证书文件:elastic-certifacates.p12
./elasticsearch-certutil cert --ca elastic-stack-ca.p12

#将证书拷贝到config配置目录下
mkdir config/certs
cp ca/* config/certs/
ls ./config/certs/    #scp config/certs/* xxxx拷贝到集群其他节点


#elasticsearch在6.3版本之后x-pack是默认安装好的,所以不再需要用户自己去安装,es启动后直接启用即可

vim ./config/elasticsearch.yml
# 添加如下变量
## ssl
xpack.security.enabled: true  ##x-pach安全验证
xpack.security.enrollment.enabled: true
#xpack.security.transport.ssl.enabled: true  #开启ssl
#xpack.security.transport.ssl.verification_mode: certificate
#xpack.security.transport.ssl.key: certs/ca.key
#xpack.security.transport.ssl.certificate: certs/ca.crt
#xpack.security.transport.ssl.certificate_authorities: certs/ca.crt
# 生成ca证书
xpack.security.http.ssl:
	enabled: true
	keystore.path: certs/http.p12
xpack.security.transport.ssl:
	enabled: true
	verification_mode: certificate
	keystore.path: certs/elastic-certificates.p12
	truststore.path: certs/elastic-certificates.p12

在这里插入图片描述
在这里插入图片描述

在这里插入代码片

2)启用HTTPS

xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: /usr/local/elasticsearch-8.4.1/config/certs/elastic-certificates.p12
xpack.security.http.ssl.truststore.path:  /usr/local/elasticsearch-8.4.1/config/certs/elastic-certificates.p12

openssl pkcs12 -in elastic-certificates.p12 -cacerts -nokeys -out elastic-ca.pem
vim kibana.yml
elasticsearch.ssl.certificateAuthorities: ["path/elastic-ca.pem"]
elasticsearch.ssl.verificationMode: certificate

3)配置密码

# 自动生成密码(二选一)
/usr/local/elasticsearch/bin/elasticsearch-setup-passwords auto
# 手动生成密码(二选一)
/usr/local/elasticsearch/bin/elasticsearch-setup-passwords interactive
#创建license.json
{
    "license": {
        "uid": "9gfhf46-5g78-4f1e-b5a4-afet359bc3a3",
        "type": "platinum",
        "issue_date_in_millis": 1534723200000,
        "expiry_date_in_millis": 2544271999999,
        "max_nodes": 100,
        "issued_to": "www.plaza4me.com",
        "issuer": "Web Form",
        "signature": "AAAAAwAAAA3lQFlr4GED3cGRsdfgrDDFEWGN0hjZDBGYnVyRXpCOsdfasdfsgEfghgdg3423MVZwUzRxVk1PSmkxagfsdf3242UWh3bHZVUTllbXNPbzBUemtnbWpBbmlWRmRZb25KNFlBR2x0TXc2K2p1Y1VtMG1UQU9TRGZVSGRwaEJGUjE3bXd3LzRqZ05iLzRteWFNekdxRGpIYlFwYkJiNUs0U1hTVlJKNVlXekMrSlVUdFIvV0FNeWdOYnlESDc3MWhlY3hSQmdKSjJ2ZTcvYlBFOHhPQlV3ZHdDQ0tHcG5uOElCaDJ4K1hob29xSG85N0kvTWV3THhlQk9NL01VMFRjNDZpZEVXeUtUMXIyMlIveFpJUkk2WUdveEZaME9XWitGUi9WNTZVQW1FMG1DenhZU0ZmeXlZakVEMjZFT2NvOWxpZGlqVmlHNC8rWVVUYzMwRGVySHpIdURzKzFiRDl4TmM1TUp2VTBOUlJZUlAyV0ZVL2kvVk10L0NsbXNFYVZwT3NSU082dFNNa2prQ0ZsclZ4NTltbU1CVE5lR09Bck93V2J1Y3c9PQAAAQCGcZtOlZwj0Rnl2MUjERG94a+xcifpVAurIA+z4rroxaqaewpb2MJLZVJt1ZCGeKB0KIWRAm2pkPjM2JigjaPIUBhpW4/yUzbdRtRuQB4loEKd7/p9EbHDh5GzeI8qfkMh3j7QaAlz4Bk+eett+ZNqNXHEdkr+Re9psdnqfUESz1uROhMoYWbn/Bdd0AJLKzhRnEOE972xdnAar8bCP1DIDljI9IOnYhEc6O6CboKCMJY4AWOvJY83bud4FO25hrKf6bMy0F2oO2yUkVV0UiFMX19JbhcC+WIAgxMk/KG7e/MqR8bJ1jNu2usMlgkvV97BxiPogTujFnTQxoHdpNdR",
        "start_date_in_millis": 1534723200000
    }
}
#上传license
curl -XPUT -u elastic 'http://127.0.0.1:9200/_xpack/license' -H "Content-Type: application/json" -d @license.json
#配置kibana
cd /usr/local/kibana/config
vim kibana.yml  #如下将你的密码配置

elasticsearch.username: kibana
elasticsearch.password: XXXXXXXXXXX
#验证
访问kibana在登陆成功后的主页面Management->LicenseManagement查看确认

三、附录

X.509 是一种证书标准,主要定义了证书中应该包含哪些内容。其详情可以参考RFC5280,SSL使用的就是这种证书标准。而我们常见的PEM就是一种编码格式,目前常见最多的两种编码/数据格式有:PEM(Privacy Enhanced Mail,)和 DER (Distinguished Encoding Rules);

PEM,是一种文本格式,它以”——-BEGIN…”开头”——-END…”结尾,内容以BASE64编码, 它是由RFC1421至1424定义的一种数据格式。 查看PEM格式证书的信息:openssl x509 -in certificate.pem -text -noout; Apache和Nginx服务器偏向于使用这种编码格式。linux中我们一般生成的.cert和.key文件都是PEM格式的;一个PEM文件可以包含公钥证书/私钥/或者能形成证书链的多个证书,PEM文件的后缀可以是:.crt, .pem, .cer, and .key

DER(Distinguished Encoding Rules) :其是二进制格式,不可读。 查看DER格式证书的信息:openssl x509 -in certificate.der -inform der -text -noout; Java和Windows服务器偏向于使用这种编码格式。DER 文件是公钥证书或者私钥通过DER编码以后生成的二进制文件,通常后缀为der或cer;一般都是使用key/crt进行DER编码,生成二进制文件(DER),然后对二进制文件再Base64编码,即可以生成ASCII码文件(PEM),最后生成cer文件。

其他相关:

CRT(Certificate Revocation List证书吊销列表):常见于Nginx系统,有可能是PEM编码,也有可能是DER编码,大多数应该是PEM编码。*.crl

CER(windows中对应证书格式):常见于Windows系统,同样的,可能是PEM编码,也可能是DER编码,大多数应该是DER编码。

KEY:通常用来存放一个公钥或者私钥,并非X.509证书,编码同样的,可能是PEM,也可能是DER。 查看KEY的办法:openssl rsa -in mykey.key -text -noout; 如果是DER格式的话,同理应该这样了:openssl rsa -in mykey.key -text -noout -inform der

CSR(Certificate Signing Request证书签名请求):即证书签名请求,这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥(当然还附带了一些别的信息),在生成这个申请的时候,同时也会生成一个私钥, 查看的办法:openssl req -noout -text -in my.csr (如果是DER格式的话照旧加上-inform der,这里不写了)

PFX/P12(predecessor of PKCS#12):对Nginx服务器来说,一般CRT和KEY是分开存放在不同文件中的,但Windows的IIS则将它们存在一个PFX文件中,这个文件包含了证书及私钥,PFX通常会有一个”提取密码”,读取内容的时候,需要提供提取密码才可访问,PFX使用的是DER编码,如何把PFX转换为PEM编码? openssl pkcs12 -in for-iis.pfx -out for-iis.pem -nodes;这个时候会提示你输入提取代码. for-iis.pem就是可读的文本,生成pfx的命令类似这样:openssl pkcs12 -export -in certificate.crt -inkey privateKey.key -out certificate.pfx -certfile CACert.crt,其中CACert.crt是CA(权威证书颁发机构)的根证书,通过-certfile参数使用;我们也可以这里理解,PFX其实是个证书密钥库。PKCS#12文件是含有多个证书,形成证书链,后缀为.p12或者 pfx;

JKS(Java Key Storage):这是Java的专用的,跟OpenSSL关系不大,它利用Java的一个叫”keytool”的工具,可以将PFX转为JKS,当然了,keytool也能直接生成JKS。 证书编码的转换 PEM转为DER执行:openssl x509 -in cert.crt -outform der -out cert.der;

DER转为PEM:openssl x509 -in cert.crt -inform der -outform pem -out cert.pem (提示:要转换KEY文件也类似,只不过把x509换成rsa,要转CSR的话,把x509换成req…)

获得证书:向权威证书颁发机构申请证书,执行:openssl req -newkey rsa:2048 -new -nodes -keyout my.key -out my.csr;然后把csr交给权威证书颁发机构,权威证书颁发机构对此证书进行签名,当权威证书颁发机构颁发的证书过期时,我们可以用之前同样的csr来申请新的证书,key保持不变;或者生成自签名的证书,执行:openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem;在生成证书的过程中会要你填一堆的东西,其实真正要填的只有Common Name,通常填写你服务器的域名,或者你服务器的IP地址,其它都可以留空的。 生产环境中不建议使用自签的证书,可向域名厂商申请证书。CA颁发证书过程如下:

在这里插入图片描述

1、申请者使用自己的身份与公钥生成CSR文件(certificate signing request),请求CA给自己颁发用CA私钥签名过的证书;
2、CA验证申请者身份;
3、CA使用自己的私钥,对申请者的身份、公钥做摘要,并对摘要进行签名,附在身份、公钥之后,生成证书;
4、其他用户在与SSL证书拥有者通信时,使用CA的公钥验证证书上的签名是CA私钥签的,从而确定身份与公钥是发送者本人的,而非经过第三方修改(中间人攻击)。

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

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

相关文章

干货分享:超级浏览器使用感受

在亚马逊做工艺品时间挺长的了,来说说我这几年使用超级浏览的感受。 现在做跨境的就跟做国内的电商平台一样卷了,不仅产品要新奇独特、要包邮价格还要有优势,可以说以前跨境电商是卖方市场,现在已经妥妥变成买方市场了。但这是国际…

python基础之模块与列表

文章目录一、模块模块名也是一个标识符二、列表高级变量类型:在python中,所有非数字型变量都支持以下特点:列表的定义:列表函数使用:关键字、函数和方法科普:列表的迭代 遍历:一、模块 模块是p…

一文了解 Go 中的指针和结构体

一文了解 Go 中的指针和结构体前言指针指针的定义获取和修改指针所指向变量的值结构体结构体定义结构体的创建方式小结耐心和持久胜过激烈和狂热。 前言 前面的两篇文章对 Go 语言的基础语法和基本数据类型以及几个复合数据类型进行介绍,本文将对 Go 里面的指针和结…

机器学习-(手推)线性回归-最小二乘法(矩阵表达)、几何意义

一、最小二乘法(矩阵表达)误差平均分散每个样本 如下数学推到过程(手推!!!): 数据介绍: D{(x1,y1),(x2,y2),......(xn,yn), Xi(P维列向量&…

行列向量的维数和个数的关系【三秩相等作为桥梁】

前置知识 1.列向量组维数增加时,向量组的极大无关组增加(或不变)。 2. 三秩相等 向量组证明 直观证明 这两个列向量显然是相关的。 这两个列向量当a和b取k和2k的时候相关(k为任意常数),当不是k和2k的时…

【2-Docker安装部署ElasticSearch和Kibanan详细步骤】

一.知识回顾 【0.ElasticSearch专栏在这里哟,想要学习的可自行进入专栏学习】 【1-ElasticSearch的基本介绍与用途、ElasticSearch中一些基本的概念、倒排索引的基本概念】 二.Docker安装部署ElasticSearch 2.1 docker pull 从镜像仓库中拉拉取ElasticSearch的镜像…

【零基础入门SpringMVC】第三期——请求域添加数据与视图

一、域对象共享数据 SpringMVC 中有哪些域对象? Request请求域,代表一次请求,从浏览器开启到关闭Session请求域,代表一次会话,从服务器开启到关闭【一次getSession获得了cookie,这个会话没关闭,…

Romantics三大浪漫(编译原理+操作系统+计算机图形学)

Romantics三大浪漫 一、编译原理1.1 研究翻译的科学1.2 编译器和解释器1.3 编译的流程(JIT为例)1.4 词法分析器1.5 多有限状态机提取Token- 实现词法分析器lexer1.6 实现流的peek和putBack操作一、编译原理 本章目标: 提升编程能力 区别于面向研究人员、学者的编译原理教学&a…

CSS学习笔记(三)

her~~llo,我是你们的好朋友Lyle,是名梦想成为计算机大佬的男人! 博客是为了记录自我的学习历程,加强记忆方便复习,如有不足之处还望多多包涵!非常欢迎大家的批评指正。 目录 一、CSS 的三大特性 1.1 层叠…

mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存及第三方缓存)

mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存)MyBatis的缓存机制MyBatis的一级缓存MyBatis的二级缓存二级缓存的相关配置MyBatis缓存查询的顺序整合第三方缓存EHCacheEHCache配置文件说明:MyBatis的缓存机制 MyBatis作为持久化框架&…

社区故事|SmartX 用户社区技术发烧友独家专访

小伙伴们,SmartX 用户社区已经陪伴我们走过近两年的时光,这期间有一千多位小伙伴加入我们,共同讨论问题、分享经验。今天,SmartX 用户社区的一线记者小乐为我们带来了独家采访,揭秘社区中两位技术发烧友的幕后故事&…

葡萄糖-聚乙二醇-转铁蛋白|Transferrin-PEG-Glucose|转铁蛋白-PEG-葡萄糖

转铁蛋白又名运铁蛋白 transferrin,TRF,siderophilin)还可以提供PEG接枝修饰葡萄糖,葡萄糖-聚乙二醇-转铁蛋白,Transferrin-PEG-Glucose,转铁蛋白-PEG-葡萄糖 中文名称:葡萄糖-转铁蛋白 英文名称:Glucose…

Java学习——Servlet服务器请求响应程序

Servlet服务器程序 1. Servlet的概念 Servlet(Server Applet):运行在Web服务器端(Tomcat)的小程序。 Servlet的主要作用:接收客户端浏览器的请求,还可以为客户端浏览器做出响应。 学习Servl…

戴尔笔记本重装系统按f几进入

有不少使用戴尔笔记本电脑的用户对于u盘重装系统中的按f几进入u盘启动的操作不熟悉,导致自己无法独立完成戴尔笔记本重装系统的步骤怎么办?其实相关的方法不难,下面小编就教下大家戴尔笔记本重装系统按f几进入u盘启动项安装。 工具/原料&…

【培训】MMEdu离线版的使用:实现石头剪刀布图像分类的检测

一、MMEdu离线版的使用 1.双击XEdu v1.0.exe解压缩到某个盘,会是一个文件夹XEdu 2.进入XEdu,双击运行“点我初始化.bat”,等待至运行结束命令提示符窗口自动关闭 3.双击运行“jupyter编辑器.bat”,将会打开一个网页版jupyter&…

第五站:操作符(第二幕)

在前面的文章中我们详细讲解了操作符的一些内容, 今天我们来继续了解操作符剩余的内容 操作符第一幕的传送门在这:第五站:操作符(第一幕) 目录 七、关系操作符 八、逻辑操作符 1.基础知识 2.几道经典的题目 九、条…

视频压缩软件哪个好?万兴优转:好用的视频无损压缩软件

如今,无论是学生党,上班族还是专业的视频制作者,都会遇到视频文件体量太大,需要对视频文件进行压缩的时候,但是又会担心视频压缩以后,画质受损,清晰度不如从前,所以一个好用的视频压…

机器学习笔记之高斯网络(三)高斯马尔可夫随机场

机器学习笔记之高斯网络——高斯马尔可夫随机场引言回顾:马尔可夫随机场——团、势函数高斯马尔可夫随机场点势函数关联的项边势函数相关的项关于多元高斯分布学习任务的核心思想关于条件独立性的总结引言 上一节介绍了高斯贝叶斯网络(Gaussian Bayesian Network,G…

c语言tips-带参main函数

0.写在最前 最近因为工作需要开始重新学c语言,越学越发现c语言深不可测,当初用python轻轻松松处理的一些数据,但是c语言写起来却异常的复杂,这个板块就记录一下我的c语言复习之路 1. main函数的两种表现形式 main函数是c/cpp语言的…

python破解wifi教程

目录 一、安装pywifi 二、构建wifi密码字典 三、python实现wifi破解 四、结果展示 4.1 选择要破解的wifi名称 4.2 获取字典 4.3 成功破解 一、安装pywifi pywifi是在python中一个用于操作无线接口的模块,可以跨平台使用,Windows和Linux都支持 …