Elasticsearch 8.4.1 配置自签名证书和启用Https
创始人
2024-02-16 05:23:33

一、背景

某次安全扫描过程中,发现环境存在【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: truekeystore.path: certs/http.p12
xpack.security.transport.ssl:enabled: trueverification_mode: certificatekeystore.path: certs/elastic-certificates.p12truststore.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.p12openssl 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私钥签的,从而确定身份与公钥是发送者本人的,而非经过第三方修改(中间人攻击)。

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...