elasticsearch8+生成证书及使用

elasticsearch8+版本证书相关问题

1. 说明

整个证书系统,是由一个根证书,签发各个节点的证书组成

文件后缀说明

.crt: 证书文件,通常包含公钥。
.key: 私钥文件,通常与证书配对使用。

当前文章只涉及这两种文件

2. 生成根证书

/usr/share/elasticsearch/bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip

ca: 此参数表明要执行的操作是生成证书颁发机构(CA)。证书颁发机构在创建和签署其他证书时发挥着关键作用。
--silent: 使用该参数后,命令会以静默模式运行。这意味着不会有交互式提示出现,所有默认值都会被自动接受。
--pem: 该参数指定生成的证书和密钥将采用 PEM(Privacy-Enhanced Mail)格式。PEM 格式的文件便于与其他系统进行集成。
-out: 此参数指定了输出文件的路径。生成的证书和密钥会被压缩到 config/certs/ca.zip 文件中。

3. 准备instances.yml文件

instances.yml 文件通常与证书生成工具(如 elasticsearch-certutil cert)配合使用,用于定义需要生成证书的节点信息。当你需要为 Elasticsearch 集群中的多个节点生成证书时,可以通过编辑这个文件来指定每个节点的详细信息,而不是通过命令行参数逐个指定。

instances.yml文件内容

instances:
  - name: elasticsearch
    ip: 
      - 172.16.18.3
      - 10.21.12.2
    dns:
      - localhost
      - elasticsearch

当前instances.yml文件表示,为名称为elasticsearch的节点生成一份证书,elasticsearch节点部署的ip为172.16.18.3或者10.21.12.2,dns为localhost或者elasticsearch

如果es在物理机部署,则在ip字段写物理机ip,
如果es在docker当中部署,可以将物理机ip与容器ip都写,
如果容器ip不固定,只写物理机ip
如果无固定物理机地址,可以利用dns字段,但是其他组件例如kibana、logstash访问es时,要通过定义的dns访问

4. 生成各个节点证书

/usr/share/elasticsearch/bin/elasticsearch-certutil cert --silent --pem -out config/certs/certs.zip --in config/certs/instances.yml --ca-cert config/certs/ca/ca.crt --ca-key config/certs/ca/ca.key

cert: 指定生成节点证书(而非 CA 证书)。
--silent: 以静默模式运行命令,避免交互式提示,自动接受默认值。
--pem: 指定生成 PEM 格式的证书和私钥文件,便于与其他系统集成。
-out: 指定输出文件路径,生成的所有节点证书和私钥将被打包到 certs.zip 中。
--in: 指定输入配置文件,即前面准备的instances.yml
--ca-cert: 指定现有 CA 证书的路径,用于签署新生成的节点证书。当前为第1步当中生成的ca.zip解压出来的.crt文件
--ca-key: 指定现有 CA 私钥的路径,用于对节点证书进行签名。注意:CA 私钥是敏感信息,需妥善保管。当前为第1步当中生成的ca.zip解压出来的.key文件

执行脚本之后,会生成certs.zip文件,解压后得到elasticsearch.crt与elasticsearch.key

5. 使用

elasticsearch节点当中使用

# http端口的配置
xpack.security.http.ssl:
  enabled: true
  verification_mode: certificate
  key: certs/elasticsearch/elasticsearch.key  # 节点的私钥文件
  certificate: certs/elasticsearch/elasticsearch.crt  # 节点的证书文件
  certificate_authorities: certs/ca/ca.crt  # 根证书

# transport端口的配置
xpack.security.transport.ssl:
  enabled: true
  verification_mode: certificate
  key: certs/elasticsearch/elasticsearch.key  # 节点的私钥文件
  certificate: certs/elasticsearch/elasticsearch.crt  # 节点的证书文件
  certificate_authorities: certs/ca/ca.crt  # 根证书

kibana连接elasticsearch时使用

elasticsearch.hosts: [ "https://elasticsearch:9200" ]  # 这里的elasticsearch地址,可以使用ip也可以使用域名,前提是要与生成证书时的instances.yml一致

elasticsearch.ssl.certificateAuthorities: ["/usr/share/kibana/certs/ca/ca.crt"]  # 根证书

logstash连接elasticsearch时使用

output {
    elasticsearch {
		# 这里的elasticsearch地址,可以使用ip也可以使用域名,前提是要与生成证书时的instances.yml一致
        hosts  => ["https://elasticsearch:9200"]
        user => "elastic"
        password => "xxxxxx"

        index  => "xxxxxx"
        codec  => "json"

        # ssl设置
        ssl_enabled => "true"
        ssl_certificate_authorities => "/usr/share/logstash/certs/ca/ca.crt"  # 根证书
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值