别再被默认证书坑了!手把手教你为Elasticsearch 8.x生成10年有效期的自定义证书(附Kibana连接避坑指南)

张开发
2026/4/21 6:41:17 15 分钟阅读

分享文章

别再被默认证书坑了!手把手教你为Elasticsearch 8.x生成10年有效期的自定义证书(附Kibana连接避坑指南)
Elasticsearch生产环境证书管理实战10年有效期配置与Kibana无缝衔接指南当凌晨三点收到Elasticsearch集群告警时运维团队最不愿看到的就是SSL handshake failed之类的证书错误。去年某电商平台大促期间就曾因默认证书突然过期导致全站搜索服务瘫痪6小时——这种本可避免的事故往往源于对证书生命周期的疏忽。本文将彻底解决这个痛点从原理到实践演示如何为Elasticsearch 8.x打造可持续10年的安全通信体系。1. 为什么生产环境必须替换默认证书Elasticsearch 8.x默认启用的安全模块会生成两类证书http.p12客户端通信和transport.p12节点间通信。官方设计的1-3年有效期对开发环境足够但在生产环境埋下重大隐患默认证书的三大致命缺陷有效期过短http.p12仅1年无法统一管理多集群证书到期前无主动告警机制证书过期引发的连锁反应# 典型错误日志示例 [ERROR][o.e.x.s.t.n.SecurityNetty4Transport] [node-1] SSL handshake failed javax.net.ssl.SSLHandshakeException: PKIX path validation failed: java.security.cert.CertPathValidatorException: validity check failed通过OpenSSL查看默认证书有效期以Mac/Linux为例openssl pkcs12 -in config/certs/http.p12 -nodes | openssl x509 -noout -dates输出结果通常会显示notAfter日期距离当前时间仅365天。2. 生成10年有效期CA根证书证书体系建设的首要步骤是建立私有CA中心。Elasticsearch提供的certutil工具能快速构建完整的PKI体系。2.1 创建CA根证书进入ES安装目录的bin文件夹执行./elasticsearch-certutil ca --days 3650 --pass mySecurePassword关键参数说明--days 3650设置10年有效期--pass为CA证书添加密码保护生成后的CA证书elastic-stack-ca.p12需要安全存储建议加密备份到至少3个物理隔离的位置设置严格的访问权限chmod 600记录密码到企业密码管理系统安全提示CA私钥泄露等于整个证书体系崩溃必须与节点证书分开存储2.2 生成节点通信证书基于CA证书签发节点证书./elasticsearch-certutil cert \ --ca elastic-stack-ca.p12 \ --days 3650 \ --pass nodeCertPassword \ --out elastic-nodes.p12证书文件结构解析文件类型包含内容用途.p12公钥私钥节点身份认证.crt公钥证书客户端验证.key私钥文件加密通信3. 集群证书部署实战3.1 证书文件标准化部署建议采用以下目录结构/config /certs /archive # 存放历史证书 /live # 当前使用证书 node1.p12 node2.p12 elasticsearch.keystore配置elasticsearch.yml关键参数xpack.security.transport.ssl: enabled: true verification_mode: certificate keystore.path: certs/live/node1.p12 truststore.path: certs/live/node1.p123.2 密码安全管理三部曲将密码存入keystore./elasticsearch-keystore add \ xpack.security.transport.ssl.keystore.secure_password验证密码已存储./elasticsearch-keystore list | grep ssl自动化密码轮换方案# 密码更新脚本示例 NEW_PASS$(openssl rand -base64 32) echo $NEW_PASS | ./elasticsearch-keystore add \ xpack.security.transport.ssl.keystore.secure_password -f4. Kibana连接证书的黄金配置证书更换后Kibana连接失败的常见报错Kibana server is not ready yet. Unable to retrieve version information from Elasticsearch nodes.4.1 全新安装配置流程生成Kibana enrollment token./elasticsearch-create-enrollment-token -s kibana在kibana.yml中配置server.ssl: enabled: true certificate: /path/to/kibana.crt key: /path/to/kibana.key elasticsearch.hosts: [https://es-node1:9200] elasticsearch.ssl.certificateAuthorities: [/path/to/ca.crt]4.2 证书更新后的衔接方案当ES证书变更时需要同步更新Kibana配置重置Kibana系统账号密码./elasticsearch-reset-password -u kibana_system清理Kibana缓存rm -rf data/*.ndjson验证连接的快速测试curl --cacert /path/to/ca.crt -u elastic https://localhost:92005. 证书生命周期管理进阶技巧5.1 自动化监控方案使用Prometheus监控证书有效期# cert_exporter配置示例 scrape_configs: - job_name: certificate_expiry static_configs: - targets: [/etc/elasticsearch/certs/live/node1.p12] metrics_path: /probe params: module: [pkcs12] password: [$PASSWORD]5.2 无缝轮换策略双证书并行方案# 弹性配置示例 xpack.security.transport.ssl: keystore.path: certs/live/new_cert.p12 truststore.path: certs/live/old_cert.p12分批次节点重启# 蓝绿部署脚本片段 for node in $(seq 1 3); do ssh node-$node systemctl restart elasticsearch sleep 300 # 等待节点恢复 curl -X POST localhost:9200/_cluster/health?wait_for_statusyellow done在金融行业某生产集群的实践中这套证书管理方案成功实现了零停机证书轮换全集群统一到期提醒自动化的密码更新流程

更多文章