【实战ES】实战 Elasticsearch:快速上手与深度实践-6.1.2TLS加密通信配置

发布于:2025-03-13 ⋅ 阅读:(112) ⋅ 点赞:(0)

👉 点击关注不迷路
👉 点击关注不迷路
👉 点击关注不迷路


6.1.2 TLS加密通信配置深度实战指南

  • Elasticsearch集群TLS加密通信全链路架构
安全基础设施
Elasticsearch集群
客户端层
TLS加密通信
TLS加密通信
TLS加密通信
TLS加密通信
TLS加密通信
TLS加密通信
TLS加密通信
传输层TLS加密
节点证书
CA证书颁发机构
客户端证书
主节点
协调节点
节点间通信
数据节点
Logstash/Beats
Kibana
应用程序

1. TLS核心配置原理

  • TLS(Transport Layer Security)即传输层安全协议,是一种在网络通信中保障数据安全传输的协议,其前身是 SSL(Secure Sockets Layer)。
  • TLS 协议在当今的网络安全领域起着至关重要的作用,是保障网络通信安全的重要基础。

1.1 加密层对比矩阵

加密层级 协议版本 密钥交换算法 证书类型 性能开销
传输层加密 TLS 1.3 ECDHE_RSA x509v3 8-12%
HTTP层加密 TLS 1.2 DHE_RSA PEM格式 5-8%
跨集群加密 TLS 1.3 ECDHE_ECDSA PKCS#12 10-15%
控制台加密 TLS 1.2 RSA JKS 3-5%

1.2 证书管理方案对比

方案类型 优点 缺点 适用场景
自签名证书 快速部署 缺乏信任链 开发测试环境
私有CA证书 内部统一管理 需要维护CA基础设施 企业内网环境
公共CA证书 浏览器自动信任 成本较高 公有云环境
Let’s Encrypt 免费自动续期 有效期短(90天) 互联网公开服务

2. 全链路配置实战

2.1 证书生成模板

# 生成CA证书(有效期10年)
# openssl是一个强大的开源加密工具包,req命令用于创建和处理证书签名请求(CSR)和自签名证书
# -x509选项表示生成自签名的X.509证书,常用于CA证书的生成
# -sha384指定使用SHA-384哈希算法对证书进行签名,提高签名的安全性
# -newkey rsa:4096表示生成一个新的RSA私钥,密钥长度为4096位,密钥长度越长,安全性越高
# -keyout ca.key指定将生成的私钥保存到ca.key文件中
# -out ca.crt指定将生成的证书保存到ca.crt文件中
# -days 3650指定证书的有效期为3650天,即10年
# -subj "/CN=Elastic CA/O=Company"设置证书的主题信息,CN表示通用名称,这里是Elastic CA;O表示组织名称,这里是Company
# -addext "keyUsage=critical,keyCertSign,cRLSign"添加证书扩展信息,keyUsage表示密钥的使用方式,critical表示该扩展是关键的,keyCertSign表示该密钥可用于签发其他证书,cRLSign表示可用于签发证书吊销列表
openssl req -x509 -sha384 -newkey rsa:4096 \
  -keyout ca.key -out ca.crt -days 3650 \
  -subj "/CN=Elastic CA/O=Company" \
  -addext "keyUsage=critical,keyCertSign,cRLSign"

# 生成节点证书
# -newkey rsa:4096表示为节点证书生成一个新的4096位RSA私钥
# -nodes选项表示生成的私钥不进行加密,方便后续使用
# -keyout node01.key指定将生成的节点私钥保存到node01.key文件中
# -out node01.csr指定将生成的证书签名请求(CSR)保存到node01.csr文件中
# -subj "/CN=node01.es.com/O=Company"设置节点证书的主题信息,CN为节点的通用名称,这里是node01.es.com;O为组织名称,这里是Company
openssl req -newkey rsa:4096 -nodes \
  -keyout node01.key -out node01.csr \
  -subj "/CN=node01.es.com/O=Company"

# CA签发节点证书
# x509命令用于处理和显示X.509证书
# -req选项表示处理证书签名请求
# -in node01.csr指定要处理的证书签名请求文件为node01.csr
# -CA ca.crt指定使用的CA证书文件为ca.crt
# -CAkey ca.key指定使用的CA私钥文件为ca.key
# -CAcreateserial选项表示如果CA证书的序列号文件不存在,则创建一个新的序列号文件
# -out node01.crt指定将签发好的节点证书保存到node01.crt文件中
# -days 825指定节点证书的有效期为825天
# -sha384指定使用SHA-384哈希算法对节点证书进行签名
# -extfile <(echo -e "...")通过扩展文件指定节点证书的扩展信息
# keyUsage=critical,digitalSignature,keyEncipherment表示密钥的使用方式,关键扩展,可用于数字签名和密钥加密
# extendedKeyUsage=serverAuth,clientAuth表示扩展密钥使用方式,可用于服务器认证和客户端认证
# subjectAltName=DNS:node01.es.com,DNS:node01指定证书的备用名称,用于支持不同的域名访问
openssl x509 -req -in node01.csr -CA ca.crt -CAkey ca.key \
  -CAcreateserial -out node01.crt -days 825 -sha384 \
  -extfile <(echo -e "keyUsage=critical,digitalSignature,keyEncipherment\n\
extendedKeyUsage=serverAuth,clientAuth\n\
subjectAltName=DNS:node01.es.com,DNS:node01")

2.2 集群加密配置

# elasticsearch.yml 是 Elasticsearch 的核心配置文件,用于配置 Elasticsearch 节点的各种参数和功能

# 启用 X-Pack 安全功能,X-Pack 是 Elastic 提供的一系列增强功能套件,安全功能可帮助保护 Elasticsearch 集群免受未授权访问
xpack.security.enabled: true

# 传输层加密配置
# 传输层负责 Elasticsearch 集群内各节点之间的通信,此部分配置用于保障节点间通信的安全性
xpack.security.transport.ssl:
  # 启用传输层的 SSL/TLS 加密,开启后节点间通信将使用加密通道,防止数据在传输过程中被窃取或篡改
  enabled: true
  # 验证模式设置为 "certificate",表示只验证对方证书的有效性,而不验证证书中的主机名是否与实际连接的主机名匹配
  verification_mode: certificate
  # 指定用于传输层的密钥库路径,密钥库包含节点的私钥和证书,用于在传输层建立安全连接
  keystore.path: certs/transport.p12
  # 指定用于传输层的信任库路径,信任库包含受信任的 CA 证书,用于验证对方节点证书的签名
  truststore.path: certs/transport.p12

# HTTP 层加密配置
# HTTP 层负责 Elasticsearch 与外部客户端(如 Kibana、Logstash 等)之间的通信,此部分配置用于保障客户端与节点通信的安全性
xpack.security.http.ssl:
  # 启用 HTTP 层的 SSL/TLS 加密,开启后客户端与 Elasticsearch 节点之间的 HTTP 通信将使用加密通道
  enabled: true
  # 指定用于 HTTP 层的密钥库路径,该密钥库包含节点的私钥和证书,用于在 HTTP 层建立安全连接
  keystore.path: certs/http.p12
  # 指定用于 HTTP 层的信任库路径,信任库包含受信任的 CA 证书,用于验证客户端证书的签名(如果需要客户端认证)或服务器证书的有效性
  truststore.path: certs/http.p12

# 证书自动刷新(7.14+)
# 从 Elasticsearch 7.14 版本开始支持证书自动刷新功能,这有助于在证书过期或更新时,无需重启 Elasticsearch 节点即可自动更新证书
# 指定受信任的 CA 证书路径,Elasticsearch 会使用这些 CA 证书来验证其他节点或客户端的证书
xpack.security.ssl.certificate_authorities: ["/path/to/ca.crt"]
# 启用证书自动刷新功能,开启后 Elasticsearch 会定期检查证书的状态,当发现证书更新时,自动加载新的证书
xpack.security.ssl.reload.enabled: true

3. 高级安全策略

3.1 加密协议调优

# 密码套件白名单配置
# 密码套件定义了在 SSL/TLS 握手过程中使用的加密算法组合,包括密钥交换算法、对称加密算法和消息认证码算法等。
# 通过设置密码套件白名单,可以限制 Elasticsearch 仅使用指定的安全密码套件进行通信,增强安全性。
xpack.security.ssl.cipher_suites:
  # TLS_AES_256_GCM_SHA384 是 TLS 1.3 协议中推荐的密码套件,使用 AES-256 对称加密算法和 GCM 模式进行加密,使用 SHA-384 进行消息认证,安全性较高。
  - TLS_AES_256_GCM_SHA384
  # TLS_CHACHA20_POLY1305_SHA256 也是 TLS 1.3 协议支持的密码套件,使用 ChaCha20 流加密算法和 Poly1305 消息认证码,在某些场景下性能较好,且安全性也有保障。
  - TLS_CHACHA20_POLY1305_SHA256
  # TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 适用于使用 ECDSA(椭圆曲线数字签名算法)进行身份验证的场景,采用 ECDHE 进行密钥交换,AES-256 GCM 进行加密,SHA-384 进行消息认证。
  - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
  # TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 与上一个类似,但使用 RSA 算法进行身份验证,同样采用 ECDHE 密钥交换和 AES-256 GCM 加密及 SHA-384 消息认证。
  - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

# 协议版本限制
# 限制 Elasticsearch 仅支持指定的 TLS 协议版本,避免使用存在安全漏洞的旧协议版本,从而提高通信的安全性。
xpack.security.ssl.supported_protocols:
  # TLSv1.3 是目前最新且最安全的 TLS 协议版本,它在性能和安全性上都有显著提升,如简化握手过程、增强加密算法等。
  - TLSv1.3
  # TLSv1.2 是广泛使用的 TLS 协议版本,虽然安全性相对 TLSv1.3 稍弱,但仍被大量系统支持,保留该版本可以兼容一些不支持 TLSv1.3 的客户端。
  - TLSv1.2

# OCSP 装订配置
# OCSP(在线证书状态协议)用于实时检查证书的吊销状态。OCSP 装订是指服务器在 TLS 握手过程中主动提供证书的 OCSP 响应,减少客户端查询 OCSP 服务器的延迟。
# 此配置项设置了 OCSP 装订的策略。
xpack.security.ssl.ocsp.staple_policy: must_staple
# must_staple 表示服务器必须在 TLS 握手中提供有效的 OCSP 装订信息。如果服务器无法提供,TLS 握手将失败。
# 这有助于确保客户端能够及时获取证书的最新状态,增强通信的安全性。

3.2 性能优化参数

参数 默认值 推荐值 优化效果
ssl.session_cache_size 1024 20480 提升20%握手性能
ssl.session_timeout 86400s 3600s 减少内存占用15%
http.max_initial_line_length 4096 8192 支持更长证书链
transport.compress false true 降低带宽消耗30%

4. 企业级部署方案

4.1 金融行业案例

# 多级证书体系
# 多级证书体系是一种分层的证书信任结构,包含根证书颁发机构(CA)和中间证书颁发机构,通过这种结构可以更灵活、安全地管理和分发证书。
xpack.security.ssl:
  # certificate_authorities 用于指定 Elasticsearch 信任的证书颁发机构的证书文件路径列表。
  # 当 Elasticsearch 验证其他节点或客户端的证书时,会使用这些 CA 证书来验证证书的签名链是否有效。
  certificate_authorities: 
    # 根证书颁发机构的证书文件路径,根 CA 是整个证书体系的信任基础,所有中间 CA 和终端实体证书都由根 CA 直接或间接签发。
    - "/etc/ssl/root-ca.crt"
    # 中间证书颁发机构的证书文件路径,中间 CA 由根 CA 签发,它可以进一步签发终端实体证书,这样的分层结构便于管理和扩展。
    - "/etc/ssl/intermediate-ca.crt"

# FIPS 140 - 2 合规配置
# FIPS 140 - 2 是美国联邦信息处理标准,定义了密码模块的安全要求。启用 FIPS 140 - 2 合规配置可以确保 Elasticsearch 使用符合该标准的加密算法和安全机制,满足一些对安全性有严格要求的场景,如政府、金融等行业。
# 启用 FIPS 140 - 2 模式,开启后 Elasticsearch 会使用符合 FIPS 标准的加密算法和安全操作。
xpack.security.fips_mode.enabled: true
# 设置密码哈希算法为 pbkdf2_stretch_10000。PBKDF2(Password-Based Key Derivation Function 2)是一种基于密码的密钥派生函数,
# 它通过多次迭代计算来增加破解密码的难度。这里的 stretch_10000 表示迭代次数为 10000 次,迭代次数越多,密码哈希的安全性越高。
xpack.security.authc.password_hashing.algorithm: pbkdf2_stretch_10000

# 硬件安全模块集成
# 硬件安全模块(HSM)是一种专门用于保护和管理数字密钥的物理设备,它提供了更高的安全性和可靠性,通过集成 HSM 可以增强 Elasticsearch 的密钥管理能力。
# 指定密钥库的类型为 PKCS11。PKCS11 是一个标准的加密令牌接口,它允许应用程序与 HSM 等硬件安全设备进行交互。
xpack.security.ssl.keystore.type: PKCS11
# 指定 PKCS11 模块的路径,这里是 SoftHSM 库的路径。SoftHSM 是一个软件实现的 HSM,它模拟了 HSM 的功能,可用于测试和开发环境。
# 在实际生产环境中,可能需要替换为真正的 HSM 设备对应的 PKCS11 模块路径。
xpack.security.ssl.keystore.pkcs11.path: /usr/lib/softhsm/libsofthsm2.so

4.2 实施效果指标

安全指标 配置前 配置后 提升幅度
传输层加密覆盖率 0% 100% 100%↑
中间人攻击防御能力 未防御 完全防御 N/A
合规审计通过率 65% 100% 54%↑
加密通信延迟 - +18ms -

5. 证书生命周期管理

5.1 自动化轮换方案

#!/bin/bash
# 此脚本的目的是实现证书到期前30天自动轮换,以确保系统的安全性和证书的有效性。

# 计算证书剩余有效期,判断是否距离到期还有30天
# openssl x509 -in node01.crt -noout -checkend 2592000 命令用于检查 node01.crt 证书是否会在2592000秒(即30天)内过期
# grep -c "will expire" 用于统计输出中包含 "will expire" 的行数
# 如果证书会在30天内过期,输出中会包含 "will expire",grep -c 的结果为 1;否则为 0
DAYS_REMAINING=$(openssl x509 -in node01.crt -noout -checkend 2592000 | grep -c "will expire")

# 使用 if 语句判断证书是否即将过期
if [ $DAYS_REMAINING -eq 1 ]; then
  # 若证书即将在30天内过期,开始生成新的证书
  # openssl req 命令用于创建和处理证书签名请求(CSR)
  # -newkey rsa:4096 表示生成一个新的4096位RSA私钥
  # -nodes 选项表示生成的私钥不进行加密
  # -keyout node01_new.key 指定将生成的新私钥保存到 node01_new.key 文件中
  # -out node01_new.csr 指定将生成的新证书签名请求保存到 node01_new.csr 文件中
  # -subj "/CN=node01.es.com/O=Company" 设置证书的主题信息,CN 为通用名称,O 为组织名称
  openssl req -newkey rsa:4096 -nodes \
    -keyout node01_new.key -out node01_new.csr \
    -subj "/CN=node01.es.com/O=Company"
  
  # 生成新的证书签名请求后,使用 CA 对其进行签名,生成新的证书
  # openssl x509 -req 命令用于处理证书签名请求
  # -in node01_new.csr 指定要处理的证书签名请求文件为 node01_new.csr
  # -CA ca.crt 指定使用的 CA 证书文件为 ca.crt
  # -CAkey ca.key 指定使用的 CA 私钥文件为 ca.key
  # -CAcreateserial 选项表示如果 CA 证书的序列号文件不存在,则创建一个新的序列号文件
  # -out node01_new.crt 指定将签发好的新证书保存到 node01_new.crt 文件中
  # -days 825 指定新证书的有效期为825天
  # -sha384 指定使用 SHA-384 哈希算法对新证书进行签名
  openssl x509 -req -in node01_new.csr -CA ca.crt -CAkey ca.key \
    -CAcreateserial -out node01_new.crt -days 825 -sha384
  
  # 新证书生成并签发后,需要动态重载证书,以使新证书生效
  # curl -X POST "https://node01:9200/_ssl/certificates/reload" 向 Elasticsearch 节点发送一个 POST 请求,请求重载 SSL 证书
  # -u elastic:password 用于进行基本认证,指定用户名和密码
  # -k 选项表示不验证服务器的 SSL 证书,在某些情况下可能会存在安全风险,实际使用中建议使用有效的证书进行验证
  curl -X POST "https://node01:9200/_ssl/certificates/reload" \
    -u elastic:password -k
fi

5.2 证书管理策略

管理阶段 操作规范 工具支持 审计要求
生成 密钥长度≥4096位 OpenSSL/CFSSL 生成日志存档
分发 加密通道传输 Ansible/Vault 传输记录审计
部署 滚动更新策略 Kubernetes Operator 变更审批流程
吊销 实时CRL更新 OCSP Stapling 吊销列表验证
归档 加密存储7年 AWS S3 Glacier 定期完整性校验

6. 故障排查与监控

6.1 常见问题矩阵

故障现象 根因分析 解决方案 检测工具
节点间无法通信 证书SAN配置错误 检查subjectAltName openssl x509
客户端连接被拒绝 协议版本不匹配 统一TLS版本配置 SSLLabs测试
性能显著下降 加密套件配置不当 优化密码套件列表 网络抓包分析
证书过期报警 自动续期失败 检查证书轮换脚本 Nagios监控

6.2 监控指标体系

指标名称 采集方法 告警阈值 优化方向
TLS握手失败率 日志分析 >1% 检查证书有效期
加密传输延迟 Prometheus监控 >500ms 优化密码套件
证书剩余有效期 定时脚本检测 <30天 触发自动轮换
解密错误次数 Elasticsearch Metricbeat >10次/分钟 检查协议兼容性

附录:安全合规检查清单

    1. 禁用SSLv3/TLSv1.0/TLSv1.1协议
    1. 启用HSTS严格传输安全
    1. 配置完备的证书吊销机制
    1. 实现密钥轮换自动化
    1. 启用双向认证(mTLS)
    1. 定期执行渗透测试

实施建议

  1. 生产环境必须禁用弱密码套件
  2. 使用硬件安全模块(HSM)保管根证书
  3. 建立证书变更审批流程
  4. 每季度执行安全配置审计

网站公告

今日签到

点亮在社区的每一天
去签到