Elasticsearch 8安全通信全攻略从证书生成到组件集成实战Elasticsearch 8在安全方面做了重大升级强制要求启用TLS加密通信。对于刚接触xpack.security的开发者来说证书配置往往成为第一道门槛。本文将带你从零开始用elasticsearch-certutil工具构建完整的证书体系并解决Kibana、Logstash等组件的连接难题。1. 证书体系基础与准备工作在Elasticsearch的安全架构中证书扮演着数字身份证的角色。整套系统采用PKI公钥基础设施体系由一个自签名的根证书CA和多个节点证书组成。根证书相当于最高权威机构节点证书则由它签发并验证。必备知识清单.crt证书文件包含公钥和主体信息.key私钥文件必须严格保密PEM格式Base64编码的文本格式通用性最好instances.yml节点信息声明文件准备环境时建议创建专用目录存放证书mkdir -p /usr/share/elasticsearch/config/certs cd /usr/share/elasticsearch/config/certs2. 生成根证书与节点证书2.1 创建CA根证书运行以下命令生成自签名CA证书bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip参数解析--silent非交互模式自动采用默认值--pem输出PEM格式证书-out指定输出路径解压生成的CA包unzip ca.zip -d ca将得到ca.crt根证书和ca.key根私钥两个关键文件。2.2 配置instances.yml实例文件根据部署环境的不同instances.yml的配置策略有所差异物理机部署方案instances: - name: elasticsearch ip: - 192.168.1.100 - 192.168.1.101 dns: - es-node1.example.com - es-node2.example.comDocker动态环境方案instances: - name: elasticsearch ip: - 172.17.0.2 - 172.17.0.3 dns: - elasticsearch - localhost关键配置原则IP字段需包含所有可能的访问地址DNS名称要覆盖所有客户端使用的域名容器环境建议同时配置服务名和物理IP2.3 生成节点证书执行证书签发命令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解压节点证书包unzip certs.zip -d elasticsearch将得到每个节点对应的.crt和.key文件。3. Elasticsearch节点配置在elasticsearch.yml中配置安全通信参数# HTTP API通信配置 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 # 节点间通信配置 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配置完成后重启Elasticsearch服务systemctl restart elasticsearch验证HTTPS接口是否正常工作curl -k -u elastic:yourpassword https://localhost:92004. Kibana安全连接配置Kibana需要配置CA证书才能与安全的Elasticsearch通信# kibana.yml关键配置 elasticsearch.hosts: [https://elasticsearch:9200] elasticsearch.ssl: certificateAuthorities: [/usr/share/kibana/config/certs/ca/ca.crt] verificationMode: certificate常见问题排查确保Kibana使用的ES地址与证书中的DNS/IP匹配检查CA证书路径权限建议设置为644验证网络连通性openssl s_client -connect elasticsearch:9200 -showcerts5. Logstash安全输出配置Logstash的Elasticsearch output插件需要相应调整output { elasticsearch { hosts [https://elasticsearch:9200] user logstash_writer password ${LOGSTASH_PASSWORD} ssl true ssl_certificate_authorities [/usr/share/logstash/config/certs/ca/ca.crt] cacert /usr/share/logstash/config/certs/ca/ca.crt } }性能优化建议启用SSL会话复用减少握手开销适当调整pool_max和pool_timeout参数考虑使用单独的证书目录避免重复加载6. 证书生命周期管理更新策略对比表场景处理方法影响范围CA泄露重新生成全套证书所有节点和组件节点证书过期仅更新该节点证书单个节点新增节点用原CA签发新证书无影响自动化续期方案设置证书过期监控编写证书更新脚本配置Ansible/Terraform自动化部署证书验证测试命令openssl x509 -in elasticsearch.crt -text -noout7. 多节点集群的特殊考量对于集群部署需要特别注意为每个节点生成独立证书在instances.yml中明确定义所有节点信息确保所有节点使用相同的CA证书传输层加密必须开启示例集群配置instances: - name: es-node1 ip: - 192.168.1.101 dns: - es-node1.cluster.local - name: es-node2 ip: - 192.168.1.102 dns: - es-node2.cluster.local跨数据中心部署时建议为每个区域配置专用DNS名称在证书中包含备用名称SAN考虑使用中间CA进行分级管理8. 容器化环境的最佳实践Docker/K8s环境中证书管理要点通过Volume挂载证书目录使用ConfigMap管理配置文件设置适当的文件权限考虑使用证书管理器自动续期K8s部署示例片段volumes: - name: certs-volume secret: secretName: elasticsearch-certs volumeMounts: - name: certs-volume mountPath: /usr/share/elasticsearch/config/certs readOnly: true在K8s中Ingress控制器通常需要将CA证书加入信任链配置TLS终止或透传设置正确的SNI路由规则