一、背景

某次安全扫描过程中,发现环境存在【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启动后直接启用即可;堆积集群配置,ES8版本的参数改变role.data:true不再使用,改为node.roles: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


配置参考:Update certificates ;SSLAPI

xpack.security.transport.ssl.keystore.path: config/elastic-certificates.p12
xpack.security.transport.ssl.keystore.type: PKCS12
xpack.security.transport.ssl.truststore.path: config/elastic-stack-ca.p12
xpack.security.transport.ssl.truststore.type: PKCS12
xpack.security.transport.ssl.verification_mode: certificate

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查看确认#生产kibana证书
openssl pkcs12 -in elastic-certificates.p12 -cacerts -nokeys -out elastic-ca.pemvim kibana.ymlserver.host: 0.0.0.0
elasticsearch.hosts: ["https://10.10.10.10:9200"]  // ip 替换成自己的ip
elasticsearch.username: kibana
elasticsearch.password: 111   // 密码替换成自己在上边生成的密码
elasticsearch.ssl.certificateAuthorities: ["path/elastic-ca.pem"]   //path替换成 pwd 查看出来的路径,也就是我们生成的 elastic-ca.pem 证书的路径
elasticsearch.ssl.verificationMode: certificate
#重启kibana
./kibana > kibana.log &

4)部署配置补充

ES8.x版本中自带了jdk,所以无需安装也可以正常运行ES;第一次启动后,可访问https://10.230.36.35:9200,初始账号为elastic;修改密码可执行:

./elasticsearch-reset-password --username elastic -i

集群配置参考:

# 配置集群名称,保证每个节点的名称相同,如此就能都处于一个集群之内了
cluster.name: es-clusters# 每一个节点的名称,必须不一样
node.name: es-node1# http端口(使用默认即可)
http.port: 9200# 主节点,作用主要是用于来管理整个集群,负责创建或删除索引,管理其他非master节点(此外,每一个es几点都要配置该信息,因为只有该信息配置为true的节点,才有机会在主节点挂掉之后成为新的master,如果为false,就相当于该节点在任何情况下都不可能成为master)es8之后使用node.roles
#node.master: true
# 数据节点,用于对文档数据的增删改查
#node.data: true
# 注意至少有两个具有选举master资格的节点
node.roles: [data, master]# 集群列表
discovery.seed_hosts: ["192.168.xx.xxx", "192.168.xx.xxx", "192.168.xx.xxx"]# 启动的时候使用一个master节点(当前节点的节点名称)
cluster.initial_master_nodes: ["es-node1", "es-node2", "es-node3"]
action.destructive_requires_name: false#启用系统索引自动创建
action.auto_create_index: .monitoring*,.watches,.triggered_watches,.watcher-history*,.ml*
# 证书相关
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: none
xpack.security.transport.ssl.keystore.path: /usr/local/es/elasticsearch-8.4.1/config/certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /usr/local/es/elasticsearch-8.4.1/config/certs/elastic-certificates.p12
ingest.geoip.downloader.enabled: false

软件下载:elasticsearch往期版,最新版;elasticsearch–8.4.1;elasticsearch–8.4.1文档;

kibana安装:https://www.elastic.co/cn/downloads/kibana
IK分词器安装:https://github.com/medcl/elasticsearch-analysis-ik,在release里面下载,不是下载源码,下载完成之后解压放入ES的插件即可,然后重新启动ES;

5)可视化界面

Head插件项目地址:,Nodejs项目地址,先安装node.js再安装head;

三、附录

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私钥签的,从而确定身份与公钥是发送者本人的,而非经过第三方修改(中间人攻击)。

Elasticsearch 8.4.1 配置自签名证书和启用Https相关推荐

  1. windows2016安装证书管理器、IIS配置自签名证书、导出证书、证书.pfx转化为.crt和.key

    之前写过一篇<安全篇 ━━ windows2008自建证书.IIS配置https服务器及浏览器报错处理>,配置方法大同小异. Windows Server 2016及更高版本的IIS内置了 ...

  2. routeros v6.43.2_配置自签名证书-RouterOS中级教程6

    概述: 企业互联在使用ONPN和SSTP这一类的协议的话,一般需要使用证书,来加强隧道的安全. 以前在5.x版本需要自己使用open ssl来去生成.只从6.X之后,Router OS组件逐渐完善,已 ...

  3. Harbor配置自签名证书 —— 筑梦之路

    环境说明:192.168.10.100 harbor.codemiracle.com.cn#配置hosts echo "192.168.10.100 harbor.codemiracle.c ...

  4. burpSuite之安装+配置代理+安装证书抓取https

    1.安装用的破解版,解压直接可以用 2.打开BurpSutie配置代理 使用默认的127.0.0.1:8080就好 编辑完记得Running打勾✔ 3.配置浏览器代理安装证书 对火狐浏览器配置代理及安 ...

  5. iOS 用自签名证书实现 HTTPS 请求的原理实例讲解

    在16年的WWDC中,Apple已表示将从2017年1月1日起,所有新提交的App必须强制性应用HTTPS协议来进行网络请求.默认情况下非HTTPS的网络访问是禁止的并且不能再通过简单粗暴的向Info ...

  6. iOS 用自签名证书实现 HTTPS 请求的原理

    在16年的WWDC中,Apple已表示将从2017年1月1日起,所有新提交的App必须强制性应用HTTPS协议来进行网络请求.默认情况下非HTTPS的网络访问是禁止的并且不能再通过简单粗暴的向Info ...

  7. 我是如何将网站全站启用Https的?-记录博客安装配置SSL证书全过程

    评论»   文章目录 为什么要Https 如何选择Https 安装部署SSL证书 平滑过渡Https 搜索引擎的响应 启用Https小结 正如大家所看到的,部落全站已经启用了Https访问了,连续几天 ...

  8. 轻松解决自签名证书不安全!

    本人微信公众号:CPP进阶之旅 如果觉得这篇文章对您有帮助,欢迎关注 "CPP进阶之旅" 学习更多技术干货 轻松解决自签名证书不安全!(以下过程为windows下的操作过程) 本地 ...

  9. 十大恶意软件让安卓手机成为噩梦,移动代码签名证书重要性大增

    2019独角兽企业重金招聘Python工程师标准>>> 原文地址如下: http://cn.globalsign.com/support/support_ssl_1134.html ...

最新文章

  1. rpm 安装 忽略依赖_解决RPM包依赖关系
  2. 抽象工厂和工厂设计模式之间有什么区别?
  3. 递归生成全排列【C/C++】
  4. 供应链新格局重塑全球农业贸易 对话国际农民丰收节贸易会
  5. windows下,linux下c++生成文件夹
  6. django mysql 创建表_关于 django ORM 中,数据库建表方式的问题
  7. jdbctemplate分页mysql_jdbcTemplate实现分页功能
  8. linux环境下项目启动却访问不,在Linux环境下部署项目遇到的一些问题
  9. 创业企业的破局之道,在于创业者的二层思维
  10. 用AI算法分析光影看到盲点:这项MIT新研究偷学到二娃技能
  11. Coolite一个简单例子-GridPanel列表增删改预览
  12. android 图片合成pdf文件,如何在Android上将多个图像合并到PDF文件中 | MOS86
  13. MOSSE目标跟踪算法步骤
  14. 高通骁龙888开始被Linux内核5.12版正式支持
  15. 苹果3年提起215起商标异议申请,对菠萝也要争,被指“霸凌”
  16. Linux系统管理----centos7系统进程管理
  17. 肠道细菌四大“门派”——拟杆菌门,厚壁菌门,变形菌门,放线菌门
  18. Kindle刷安卓双系统的方法_我是亲民_新浪博客
  19. 小米手机关闭广告的方法,三步让你的小米手机跟广告说再见
  20. 玩转群晖NAS——实现IPV6访问并部署动态域名解析程序(Golang)

热门文章

  1. App安全架构之前端安全防护
  2. win11 更新后无法打开商店、记事本、设置、计算器等内置应用的解决办法【亲测有效】
  3. 常见锁策略_CAS(Compare And Swap)_synchronized优化
  4. 计算机毕业设计之垃圾分类公益回收管理系统
  5. oracle数据库variable,oracle中的define,declare,variable的差别
  6. 文正·高等数学每日一题(1)·极限
  7. SQLserver2000服务点启动服务没反应,无法启动,解决办法
  8. Win10 突然蓝屏安全模式进不了,没有别的电脑和装机U盘,怎么把资料临时导出来?
  9. 最优化算法汇总,及计算实例20220621(持续更新中)
  10. c++如何让字符串重复输出_如何入门Python之自学python基础教程送你参考