告别明文密码:用自签名证书为Elasticsearch 7.x/8.x集群开启TLS与PKI认证(附Kibana对接实战)
构建零信任架构Elasticsearch集群的TLS与PKI认证全指南在数字化时代数据安全已成为企业生存的底线。想象一下当你的Elasticsearch集群暴露在内网中仅靠用户名和密码作为防护屏障就像用木栅栏保护金库——看似安全实则危机四伏。本文将带你深入探索如何通过TLS加密和PKI认证为Elasticsearch构建坚不可摧的零信任安全防线。1. 为什么企业级Elasticsearch需要PKI认证传统用户名密码认证存在三大致命缺陷静态凭证易泄露、权限管理粗放、缺乏设备身份验证。我曾亲眼见证一家金融科技公司因开发人员在GitHub误提交配置文件导致数据库凭证泄露造成数百万损失。PKI公钥基础设施认证通过数字证书实现双向身份验证带来四个维度的安全提升凭证不可复制私钥永远不出现在网络传输中细粒度访问控制证书可绑定具体服务和用户角色自动过期机制无需人工轮换密码完整审计追踪每个操作都可追溯到具体证书持有者# 传统认证与PKI认证对比 ----------------------------------------------------------------------------- | 安全维度 | 用户名密码 | PKI证书认证 | ----------------------------------------------------------------------------- | 认证方式 | 单向验证 | 双向验证 | | 凭证存储 | 配置文件明文存储 | 硬件安全模块(HSM)保护 | | 生命周期管理 | 手动变更 | 自动过期和吊销 | | 典型攻击面 | 暴力破解/中间人 | 需要物理窃取证书 | -----------------------------------------------------------------------------2. 构建私有PKI体系从CA根证书开始建立可信的PKI体系始于严谨的CA管理。我们采用三级证书架构离线根CA→中间CA→终端实体证书。这种分层设计既能保障根证书安全又便于证书的日常签发管理。2.1 创建离线根CA关键安全实践# 在隔离环境中生成4096位的RSA根CA密钥 openssl genrsa -aes256 -out rootCA.key 4096 # 创建有效期10年的根证书实际生产建议5年 openssl req -x509 -new -nodes -key rootCA.key -sha384 -days 3650 \ -out rootCA.crt -subj /CCN/STSecure/OInternal CA/CNElastic Root CA重要安全提示根CA私钥必须存储在离线加密介质中如密码保护的USB驱动器或HSM设备。日常签发使用中间CA根CA仅在中间CA过期时启用。2.2 部署中间CA用于日常签发# 生成中间CA密钥和CSR openssl genrsa -out intermediateCA.key 4096 openssl req -new -key intermediateCA.key -out intermediateCA.csr \ -subj /CCN/STSecure/OInternal CA/CNElastic Intermediate CA # 用根CA签发中间证书有效期2年 openssl x509 -req -in intermediateCA.csr -CA rootCA.crt -CAkey rootCA.key \ -CAcreateserial -out intermediateCA.crt -days 730 -sha384 \ -extfile (printf basicConstraintscritical,CA:true\nkeyUsagecritical,keyCertSign,cRLSign)将中间CA证书链合并为PEM文件供后续验证使用cat intermediateCA.crt rootCA.crt ca-chain.crt3. Elasticsearch节点证书配置实战3.1 为集群节点签发证书每个Elasticsearch节点需要独立的服务器证书包含以下关键属性Subject Alternative Name (SAN)覆盖所有可能的DNS名称和IPExtended Key Usage明确服务器认证用途适当的有效期通常不超过1年# 生成节点私钥无需密码便于服务自动加载 openssl genrsa -out elastic-node01.key 2048 # 创建CSR配置文件csr.conf cat csr.conf EOF [req] distinguished_name req_distinguished_name req_extensions v3_req prompt no [req_distinguished_name] C CN ST Secure O YourOrg CN elastic-node01.yourdomain.com [v3_req] keyUsage critical, digitalSignature, keyEncipherment extendedKeyUsage serverAuth subjectAltName alt_names [alt_names] DNS.1 elastic-node01.yourdomain.com DNS.2 elastic-node02.yourdomain.com DNS.3 elasticsearch DNS.4 localhost IP.1 192.168.1.100 IP.2 127.0.0.1 EOF # 生成CSR并签发证书 openssl req -new -key elastic-node01.key -out elastic-node01.csr -config csr.conf openssl x509 -req -in elastic-node01.csr -CA intermediateCA.crt -CAkey intermediateCA.key \ -CAcreateserial -out elastic-node01.crt -days 365 -sha384 -extfile csr.conf -extensions v3_req3.2 配置Elasticsearch安全通信在elasticsearch.yml中启用TLS并配置PKI认证xpack.security.enabled: true xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.client_authentication: required xpack.security.transport.ssl.keystore.path: certs/elastic-node01.p12 xpack.security.transport.ssl.truststore.path: certs/truststore.p12 xpack.security.http.ssl.enabled: true xpack.security.http.ssl.client_authentication: optional xpack.security.http.ssl.keystore.path: certs/elastic-node01.p12 xpack.security.http.ssl.truststore.path: certs/truststore.p12生成PKCS12格式的密钥库和信任库# 合并证书链 cat elastic-node01.crt intermediateCA.crt rootCA.crt node-full-chain.crt # 创建PKCS12密钥库 openssl pkcs12 -export -in node-full-chain.crt -inkey elastic-node01.key \ -out elastic-node01.p12 -name elastic-node01 -password pass:YourStrongPassword # 创建信任库包含CA链 keytool -importcert -alias ca-chain -file ca-chain.crt -keystore truststore.p12 \ -storetype PKCS12 -storepass YourStrongPassword -noprompt4. Kibana与客户端证书集成4.1 为Kibana服务配置HTTPSserver.ssl.enabled: true server.ssl.keystore.path: /path/to/kibana.p12 server.ssl.keystore.password: YourStrongPassword server.ssl.truststore.path: /path/to/truststore.p12 server.ssl.truststore.password: YourStrongPassword elasticsearch.ssl.certificateAuthorities: [ /path/to/ca-chain.crt ] elasticsearch.ssl.verificationMode: certificate4.2 实现客户端证书认证创建角色映射文件role_mapping.yml# 将特定证书OU映射到Kibana管理员角色 cnadmin,oudevops,oyourorg: - kibana_admin # 开发团队证书拥有只读权限 oudevelopers,oyourorg: - kibana_user在kibana.yml中启用PKI认证xpack.security.authc.providers: - pki: order: 0 enabled: true truststore.path: /path/to/truststore.p12 truststore.password: YourStrongPassword authorization_realms: - pki_mapping5. 高级安全加固与排错指南5.1 证书自动化轮换方案通过Kubernetes CSI驱动或HashiCorp Vault实现动态证书管理# Vault签发Elasticsearch证书的示例策略 path pki/issue/elasticsearch { capabilities [create, update] allowed_parameters { common_name [elastic-node*.yourdomain.com] alt_names [*.yourdomain.com] ttl [720h] } }5.2 常见故障排查清单证书验证失败检查CA链完整性openssl verify -CAfile ca-chain.crt node.crt密钥不匹配验证密钥指纹openssl pkey -in key.pem -pubout | openssl sha256SAN配置错误查看证书详情openssl x509 -in cert.crt -text -noout权限问题确保Elasticsearch用户有密钥文件读取权限chmod 400 *.key5.3 安全监控建议使用Elasticsearch自身的审计日志监控证书使用情况设置告警规则检测异常证书请求模式定期检查证书吊销列表(CRL)或配置OCSP响应器在实施过程中我发现最容易被忽视的是证书撤销机制。曾有一个离职员工仍能通过未吊销的证书访问集群直到我们部署了完整的OCSP检查才消除这一隐患。建议每季度至少进行一次证书审计确保没有僵尸证书存在。

相关新闻

最新新闻

日新闻

周新闻

月新闻