一、准备
Elasticsearch集群搭建好;我使用的docker方式部署;
二、生成证书
1、进入ES主节点容器,在${ES_HOME}/bin 下执行:
./elasticsearch-certutil ca #创建一个证书颁发机构
再执行:
./elasticsearch-certutil cert --ca elastic-stack-ca.p12
elastic-stack-ca.p12 就是上一步生成的(默认就在当前目录中)
此时在当前目录生成名为 elastic-certificates.p12 的文件,它是单个PKCS#12密钥存储库,其中包括节点证书、节点密钥和CA证书。默认情况下,elasticsearch-certutil 生成没有主机名信息的证书(也就是说,它们没有任何主题可选名称字段)。这意味着可以对集群中的每个节点使用此证书,但您必须关闭主机名验证。
将其从容器中拷贝出来。
备注:elasticsearch-certutil 的更多用法和参数,请参照:https://www.cnblogs.com/sanduzxcvbnm/p/12053850.html
2、生成PKI客户端证书,供KIbana等组件到ES的校验使用
PKI身份验证的证书必须由与用于加密HTTP通信的证书相同的CA进行签名。因此我们直接使用拷贝出的 elastic-certificates.p12,在主机上执行:
# Private Key 私钥
openssl pkcs12 -in elastic-certificates.p12 -nocerts -nodes > client.key
# Public Certificate 公共证书
openssl pkcs12 -in elastic-certificates.p12 -clcerts -nokeys > client.cer
# CA Certificate 签署公共证书的CA
openssl pkcs12 -in elastic-certificates.p12 -cacerts -nokeys -chain > client-ca.cer
3、分发证书文件
将生成的 client.key、client.cer、client-ca.cer 以及 elastic-certificates.p12文件拷贝进(或者另起容器-v挂载进)各个ES节点的${ES_HOME}/config/目录下;
也要拷贝进 kibana 容器的${KIBANA_HOME}/config/certs/目录下;
也要拷贝进logstash容器的${LOGSTASH_HOME}/config/目录下
其实可以拷贝进任意目录,只要后面配置文件中指定正确就行
注意,在这之前先将这些文件 chmod 777
三、各组件配置文件详情
1、elasticsearch.yml
# 集群配置-主节点
cluster.name: "hnjt-es-cluster"
node.name: esm1
network.bind_host: 0.0.0.0
network.publish_host: 192.168.10.180
http.port: 9201
transport.tcp.port: 9301
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: false
discovery.zen.ping.unicast.hosts: ["192.168.10.180:9301"]
discovery.zen.minimum_master_nodes: 1
# 加密节点间通信-每个节点容器都要添加
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate #只验证证书是否受信任,不执行主机名验证。还可以设置成 full(还要验证主机名)、none(不验证证书)
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12 #指定证书
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12 #将密钥存储库也用做信任存储库
# 加密http通信-每个节点容器都要添加
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: elastic-certificates.p12 #指定使用的证书
xpack.security.http.ssl.truststore.path: elastic-certificates.p12 #密钥存储库包含CA证书,因此也可以用作信任存储库