Elasticsearch7.6.2开启xpack以及客户端验证TSL

Sun 1年前 ⋅ 9845 阅读

elasticsearch jdk 安装检查sudo apt-get update等等操作在此掠过了...此处是Ubuntu 18版本的和win16版都适用

下载Elasticsearch7.6.2进行解压,然后修改下基本配置文件config下的elasticsearch.yml

#====基本配置================================
cluster.name: es-7.6.2
node.name: node-7.6.2
network.host: 127.0.0.1
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
cluster.initial_master_nodes: ["node-7.6.2"]
#====基本配置================================

然后开始配置公私钥(此时已经可以启动了)

在命令处输入elasticsearch-service即可以win服务形式安装,输入elasticsearch直接启动无附带其他功能,Ubuntu 命令是 ./ elasticsearch -d (前提是进入到elasticsearch bin 下执行 -d后台运行)

(1)sudo vim /etc/security/limits.conf(win略)
* soft nofile 204800
* hard nofile 204800
* soft nofile 204800
* hard nofile 204800
* soft noproc 65535 #设置进程数
* hard noproc 65535
(2)cd /etc/pam.d
grep pam_limits.so *
将显示有# session 的字样的文件打开,去掉注释符号# ,保存
(3)sudo vim /etc/sysctl.conf #设置内核参数
fs.file-max = 655358
vm.max_map_count=262144
sudo sysctl -p #即时生效
(4)设置进程数
ulimit -u 4096 #选取的server机器至少需要2g的内存
重新启动,启动成功。

开启xpack,配置transport安全验证(win or linux都适用)

1.执行命令创建ca 执行:elasticsearch-certutil ca

然后按照提示输入Please enter the desired output file [elastic-stack-ca.p12] 此时提示输入文件名默认为:elastic-stack-ca.p12,输入完敲回车,或者直接回车默认。

接下来会提示输入Enter password for elastic-stack-ca.p12 :密码可以为空 直接回车 此时ca 创建OK 文件会在执行目录的根目录

2.根据elastic-stack-ca.p12文件 生成elastic-certificates.p12

执行命令为:elasticsearch-certutil cert --ca elastic-stack-ca.p12

接下来会提示 输入Enter password for CA (elastic-stack-ca.p12) :上一个ca 文件的密码 如果没有则直接回车即可,

接下来会提示Please enter the desired output file [elastic-certificates.p12]:给当前生成的文件取名默认为elastic-certificates.p12

接下来会提示给当前文件设置密码Enter password for elastic-certificates.p12 : 设置完成后回车。

至此我们有了elastic-stack-ca.p12和elastic-certificates.p12两个文件

我们继续设置elasticsearch的config下的elasticsearch.yml加入如下配置

xpack:
transport:
ssl:
enabled: true #开启transport

verification_mode: certificate #证书验证

keystore:
path: /home/es/elasticsearch-7.6.2/config/elastic-certificates.p12

truststore:
path: /home/es/elasticsearch-7.6.2/config/elastic-certificates.p12

把elastic-stack-ca.p12和elastic-certificates.p12拷贝到config文件夹下(win系统注意要写成盘符完整目录比如C:\elasticsearch-7.6.2\config\elastic-certificates.p12)。

配置完成重新启动es至,此transport的安全认证启用xpack配置完成

接下来给es所有用户重置密码命令是:elasticsearch-setup-passwords interactive,把interactive换成auto则是随机生成密码


Enter password for [elastic]:
Reenter password for [elastic]:

用户有几个吧会让你依次输入,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user,elastic

这没啥好说的...重要的是https TSL步骤,有点繁琐最近公司几个小伙伴配置好几遍不行...所以特意写写步骤。

有两种模式,一种是pem模式,一种是pkcs模式。

使用命令是:elasticsearch-certutil http

pem模式

第一步执行命令后会提示是否生成CSR文件,此时选Y,

第二步问是否为每一个节点生成certificates,选Y

第三步提示下边的hostnames和ip addresses默认为空,enter进入下一步

第四步根据需要进行配置,这里也要特别注意这个subject DN:CN=node-7,后续在java代码初始化RestClient的时候用到的域名要和这里相同,要不然会报错,特别是Do you wish to change any of these options? 此时选N 这是提示是否需要修改以上选项,Generate additional certificates? [Y/n]n提示是否关联生成其他证书选N就可以了。

(注意)如果到时候RestClient配置的域名和这里的CN值不一致,则会报以下错误IOException: Host name '127.0.0.1' does not match the certificate subject provided by the peer (CN=node1.dom.com,DC-dom, DC=com),如果在本地开发,记得改hosts。

接下来根据需要设置密码,以及生成的zip文件名称

Provide a password for the private key: [ for none]设置私有密码

What filename should be used for the output zip file? [/home/ec/elasticsearch-7.6.2/elasticsearch-ssl-http.zip]敲回车 直接就生成elasticsearch-ssl-http.zip密钥包了

压缩包的elasticsearch目录下有两个重要文件,一个csr格式,另一个key格式,利用key文件生成ca文件(ca.crt)

执行命令:openssl req -new -x509 -key http-node-7.6.2.key -out ca.crt -days 3650

根据提示填写即可

然后再根据csr文件、ca文件、key文件生成需要的crt文件

执行命令:openssl x509 -req -days 3650 -in http-node-7.6.1.csr -CA ca.crt -CAkey http-node-7.6.1.key -CAcreateserial -out http-node-7.6.1.crt

配置/home/ec/elasticsearch/config/elasticsearch.yml

#======================

xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.certificate: http-node-7.6.1.crt
xpack.security.http.ssl.key: http-node-7.6.1.key

#==============

然后移动http-node-7.6.1.crt和http-node-7.6.1.key到es的配置目录config下重启服务即可

至此pem模式的es服务器端已经配置完成了

pkcs模式

第一步执行elasticsearch-certutil http 与pem同样命令,只是在询问是否生成csr文件的时候,选择N

第二步会让你输入一个现存在的ca文件路径,就把上面生成的elastic-stack-ca.p12给他输入进去就好,ca文件用我们在配置TransportClient的时候生成的,输入后继续,输入ca文件的密码,

第三步设置输入认证文件的有效时间

第四步提示输入Generate additional certificates? [Y/n]选N

后续就是设置节点名称Nodename 可以定义 hostname IP hostname和IP可以直接输入127.0.0.1

接下来回车生成证书。elasticsearch-ssl-http.zip解压后得到elasticsearch文件下的http.p12拷贝到/home/ec/elasticsearch/config/下,配置/home/ec/elasticsearch/config/elasticsearch.yml加入以下内容

#======================
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: http.p12
#=======================

一步步说了辣么多...总结起来就那么几件事 启动服务 生成服务端密钥文件 根据服务端密钥生成客户端密钥 就这么简单,公司两个小伙伴真心让我挠头啊。

接下来配置下Kibana在elasticsearch-ssl-http.zip里有个kibana文件夹里面有个elasticsearch-ca.pem的文件名,拷贝到Kibana应用里的config文件夹 更新kibana.yml ,elasticsearch.hosts: [ "http://localhost:9200" ]更新成elasticsearch.hosts: [ "https://localhost:9200" ]#注意是https

设置:elasticsearch.ssl.certificateAuthorities: [ "config/elasticsearch-ca.pem" ]

在win下必须写全路径,并且必须写成这样才能启动

elasticsearch.ssl.certificateAuthorities: C:\kibana-7.6.2/config/ca.pem

我把他写成C:/kibana-7.6.2/config/ca.pem或者是C:\kibana-7.6.2\config\ca.pem都无法启动无法加载pem文件,,,在Ubuntu 下很好只要写上/home/...即可。

至此Elasticsearch和Kibana的TSL配置完成

不说了....


全部评论: 0

    我有话说: