ES证书过期替换方案

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 在生产环境中,Elasticsearch 集群的证书可能会因为过期而导致集群无法正常工作。为了避免这种情况的发生,我们需要及时更新证书,并保证更新证书的过程中保持 Elasticsearch 集群的高可用性和数据安全性。

集群环境

ES集群版本:v6.810和v7.13.4

加密参数配置:

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12

通过配置文件看到,只针对集群中节点之间的通信进行了加密,而且是自签的CA。

生成证书为您的Elasticearch集群创建一个证书颁发机构。例如,使用elasticsearch-certutil ca命令:

bin/elasticsearch-certutil ca --days 36500

为群集中的每个节点生成证书和私钥。例如,使用elasticsearch-certutil cert 命令:

bin/elasticsearch-certutil cert  --days 36500 --ca elastic-stack-ca.p12

发现过期

通过批量扫描集群信息,发现证书过期


GET /_ssl/certificates
[
  {
    "path" : "certs/elastic-certificates.p12",
    "format" : "PKCS12",
    "alias" : "instance",
    "subject_dn" : "CN=Elastic Certificate Tool Autogenerated CA",
    "serial_number" : "e365c63bf8050b2d1a73025c37aaa6d8d0772f06",
    "has_private_key" : false,
    "expiry" : "2023-04-26T09:13:27.000Z"
  },
  {
    "path" : "certs/elastic-certificates.p12",
    "format" : "PKCS12",
    "alias" : "instance",
    "subject_dn" : "CN=instance",
    "serial_number" : "bff8e3ed43fcc2abc4e6951bd6064ed53ddb7b56",
    "has_private_key" : true,
    "expiry" : "2023-04-26T09:13:44.000Z"
  },
  {
    "path" : "certs/elastic-certificates.p12",
    "format" : "PKCS12",
    "alias" : "ca",
    "subject_dn" : "CN=Elastic Certificate Tool Autogenerated CA",
    "serial_number" : "e365c63bf8050b2d1a73025c37aaa6d8d0772f06",
    "has_private_key" : false,
    "expiry" : "2023-04-26T09:13:27.000Z"
  }
]


参考因素

  1. 是否会导致节点间通信异常
  2. 是否需要重启节点,滚动重启还是全部停掉再启动
  3. 服务连接是否受影响,数据一致性是否有保障


解决方案 及问题

基于ES6.8.10-ARC(通用3节点集群) 验证测试

遇到问题:

  1. 将证书设置1天过期,过期之后查看,集群还是正常运行(各种方式查看新证书确实都生效了)

结论总结:

  1. 1. 批量下发证书,从各个节点日志可以看出,证书已更新
[2023-04-26T10:12:41,125][INFO ][o.e.x.c.s.SSLConfigurationReloader] [es_10.4.6.2_9211] reloaded [/work/idb/es9211/config/certs/elastic-certificates.p12] and updated ssl contexts using this file
  1. 2.集群中的某个节点,重启时,如果自己的证书和其他节点不一致,可以启动但是无法被其他节点识别,无法加入集群
[2023-04-25T15:43:25,272][WARN ][o.e.x.c.s.t.n.SecurityNetty4Transport] [es_10.4.6.2_9211] client did not trust this server's certificate, closing connection Netty4TcpChannel{localAddress=0.0.0.0/0.0.0.0:9311, remoteAddress=/10.4.6.9:36814}
  1. 直接替换证书,自动就被其他节点识别到,然后节点正常加入集群

查询命令:

  1. 查询证书过期
GET /_ssl/certificates
  1. 验证证书是否有效
curl -X GET "http://escluster111.es.zcinc.com:9211/_cluster/health?pretty" -uelastic:OWRmNjA5MDlkNGM3 --cacert elastic-certificates.p12
GET /_nodes?filter_path=**.transport.ssl


官网说明:

关于证书更新的文档,版本:>=7.13

如果使用相同的CA,签发新的证书,替换原来的文件,是不需要重启节点的

如果使用不同的CA,签发新的证书,替换原来的文件,是需要滚动重启的

这里有3个点需要注意:

  1. 没有小于<7.13的版本文档说明,但是我测试6.8.10,重启和不重启,都能查询到新的证书
  2. 测试6.8.10证书过期,集群依然可以正常使用,读写、新连接,都没有影响,具体原因不清楚
  3. 为了安全,还是批量替换证书,并滚动重启一遍

以下是官网文档说:

https://www.elastic.co/guide/en/elasticsearch/reference/7.13/update-node-certs.html#use-rolling-restarts

使用相同的CA:

https://www.elastic.co/guide/en/elasticsearch/reference/7.13/update-node-certs-same.html

使用不同的CA:

https://www.elastic.co/guide/en/elasticsearch/reference/7.13/update-node-certs-different.html


其他解决方案

除了证书原地更新,其它方案都是基于索引数据迁移

第一种:reindex

使用于: 小索引、索引数少

将索引迁移到新的集群,需要停写,将域名解析切到新集群

第二种:业务双写

提供新的集群,让业务双写,再合适的时间,直接切域名解析到新集群

第三种:snapshot

通过ES的快照备份,全量+增量,时时备份增量到存储(共享存储:NFS/COS/OSS),并做时时恢复到新集群,再合适的时间停服,切域名解析到新集群。

增量的备份和恢复,最小粒度可以设置1分钟

以上三种方案,都会涉及业务短暂的停写,需要针对不同场景选用合适的方案。


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
6月前
|
域名解析 网络协议 Serverless
阿里云DNS常见问题之阿里云DNS不再支持自定义NS名称功能如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
1月前
|
Kubernetes 监控 容器
|
2月前
|
Apache 数据安全/隐私保护
HAProxy的高级配置选项-ACL篇之基于浏览器匹配制案例
这篇文章介绍了HAProxy的ACL(访问控制列表)功能,特别是如何基于用户代理(User-Agent)即浏览器类型进行匹配和流量分发的高级配置选项,并通过实战案例展示了如何配置ACL规则以实现基于不同浏览器的访问控制。
54 5
HAProxy的高级配置选项-ACL篇之基于浏览器匹配制案例
|
2月前
|
应用服务中间件 PHP Apache
HAProxy的高级配置选项-ACL篇之匹配访问路径案例
这篇文章介绍了HAProxy的高级配置选项,特别是如何使用ACL(访问控制列表)匹配访问路径以实现不同请求路径的流量分发到不同后端服务器的案例,通过实战配置展示了如何基于URL路径将请求定向到处理静态或动态内容的服务器。
78 5
HAProxy的高级配置选项-ACL篇之匹配访问路径案例
|
3月前
|
安全 网络安全 Windows
【Azure App Service】遇见az命令访问HTTPS App Service 时遇见SSL证书问题,暂时跳过证书检查的办法
【Azure App Service】遇见az命令访问HTTPS App Service 时遇见SSL证书问题,暂时跳过证书检查的办法
【Azure App Service】遇见az命令访问HTTPS App Service 时遇见SSL证书问题,暂时跳过证书检查的办法
|
5月前
|
运维 监控 Serverless
函数计算产品使用问题之如何配置YAML以自动打开日志功能
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6月前
|
敏捷开发 Kubernetes 测试技术
云效产品使用常见问题之yaml路径变量的优先级大于运行时输入的变量如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
6月前
|
Android开发 数据安全/隐私保护
安卓逆向 -- FridaHook分析3DES加密值
安卓逆向 -- FridaHook分析3DES加密值
56 0
安卓逆向 -- FridaHook分析3DES加密值
|
6月前
|
存储 Java 程序员
Minio 小技巧 | 通过编码设置桶策略,实现分享永久可下载
Minio 小技巧 | 通过编码设置桶策略,实现分享永久可下载
415 1
|
6月前
|
弹性计算 Kubernetes 中间件
基于 Traefik 如何实现向后转发自动去掉前缀?
基于 Traefik 如何实现向后转发自动去掉前缀?
下一篇
无影云桌面