Elasticsearch 8.X 集群 SSL 证书到期了,怎么更换?

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch 8.X 集群 SSL 证书到期了,怎么更换?

1、SSL 证书过期问题

如上两个问题是近期社群讨论比较多的问题,涉及8.X、7.X等版本。

在 Elasticsearch 集群中,使用SSL证书对数据传输进行加密是一种常见的安全措施。

正如《一本书讲透 Elasticsearch》所讲的一样,Elasticsearch 8.0 之后,安全设置已经成为默认配置,除非手动禁用。。

但,随着时间的推移,这些SSL证书会到期,需要进行更换以保持集群的安全性。

本文将详细介绍如何为Elasticsearch 8.X集群更换自创建的SSL证书,确保数据传输的安全性不受影响。

2、安全问题务必引起高度重视

不用多讲,Kibana 的默认端口(5601)未加密码保护而暴露在公网上,可能会造成安全风险,导致结果如图。

相信这些截图,会被文字更会引起大家的注意。

重要!!Elasticsearch 安全加固指南

3、SSL 证书到期后可能出现问题

SSL证书到期可能导致以下问题:

  • 第一:数据传输安全风险:过期的证书无法保证数据传输的加密,使得数据在传输过程中可能被截获。
  • 第二:服务中断:大多数客户端和浏览器在检测到SSL证书过期时,会中断与服务器的连接,导致服务不可用。

因此,及时更新Elasticsearch集群的SSL证书至关重要。

昨天讨论这个问题的时候,球友现身说法,提及:短期可能没有问题,但过期20几天出现过:掉节点的大问题。如下图所示。

20几天的说法,我们当前无法从源码和官方文档考证,每个集群是否都一致或者有差异。

但,可以肯定的是——到期前及时更换才是解决问题的方案。

4、怎么知道 SSL 证书过期了?

咱们验证一下是否过期了,验证方案如下:

GET /_ssl/certificates

例如,在一个新搭建的 8.11.0 版本的本地集群中,执行上述命令后,返回的结果如下。

[
  {
    "path": "certs/http.p12",
    "format": "PKCS12",
    "alias": "http",
    "subject_dn": "CN=Elasticsearch security auto-configuration HTTP CA",
    "serial_number": "2194bc3b6dd9479be90a1d1cf0aa93baace3b61f",
    "has_private_key": false,
    "expiry": "2026-12-24T03:40:55.000Z",
    "issuer": "CN=Elasticsearch security auto-configuration HTTP CA"
  },
  {
    "path": "certs/http.p12",
    "format": "PKCS12",
    "alias": "http",
    "subject_dn": "CN=VM-8-2-centos",
    "serial_number": "e8da1c214dc077f34d7d13f79cb4e1b9201cd78f",
    "has_private_key": true,
    "expiry": "2025-12-24T03:40:56.000Z",
    "issuer": "CN=Elasticsearch security auto-configuration HTTP CA"
  },
  {
    "path": "certs/http.p12",
    "format": "PKCS12",
    "alias": "http_ca",
    "subject_dn": "CN=Elasticsearch security auto-configuration HTTP CA",
    "serial_number": "2194bc3b6dd9479be90a1d1cf0aa93baace3b61f",
    "has_private_key": true,
    "expiry": "2026-12-24T03:40:55.000Z",
    "issuer": "CN=Elasticsearch security auto-configuration HTTP CA"
  },
  {
    "path": "certs/transport.p12",
    "format": "PKCS12",
    "alias": "transport",
    "subject_dn": "CN=Elasticsearch security auto-configuration HTTP CA",
    "serial_number": "2b720e3a44df21f806e5b7d82ec8fb1d7f04e4cf",
    "has_private_key": false,
    "expiry": "2122-12-01T03:40:51.000Z",
    "issuer": "CN=Elasticsearch security auto-configuration HTTP CA"
  },
  {
    "path": "certs/transport.p12",
    "format": "PKCS12",
    "alias": "transport",
    "subject_dn": "CN=VM-8-2-centos",
    "serial_number": "3de213753615e6fcba0248a6b6591788e6b249ff",
    "has_private_key": true,
    "expiry": "2122-12-01T03:40:52.000Z",
    "issuer": "CN=Elasticsearch security auto-configuration HTTP CA"
  },
  {
    "path": "certs/transport.p12",
    "format": "PKCS12",
    "alias": "transport_ca",
    "subject_dn": "CN=Elasticsearch security auto-configuration HTTP CA",
    "serial_number": "2b720e3a44df21f806e5b7d82ec8fb1d7f04e4cf",
    "has_private_key": false,
    "expiry": "2122-12-01T03:40:51.000Z",
    "issuer": "CN=Elasticsearch security auto-configuration HTTP CA"
  }
]

很明显,我当前集群显示是没有过期的。

上述 JSON 数据列出了 Elasticsearch 集群中使用的一系列 SSL 证书的详细信息。各个证书用于不同的目的,如 HTTP 通信和节点之间的传输层(transport layer)通信。

让我们逐一解读这些证书的关键信息,以及为什么会有不同的到期年份(2026年、2025年和2122年)。

证书详细信息——每个证书条目包含以下关键信息:

| 字段              | 释义                                                                                   |
|------------------|----------------------------------------------------------------------------------------|
| `path`           | 证书存储的路径,如在 `elasticsearch.yml` 文件中配置。                                    |
| `format`         | 文件的格式。可选:`jks`、`PKCS12`、`PEM`。其中 `PKCS12` 是存储证书和私钥的标准格式。            |
| `alias`          | 证书的别名,用于识别证书的用途。|
| `subject_dn`     | 证书主题的专有名称(Distinguished Name,DN),即证书主题的唯一名称。                         |
| `serial_number`  | 证书的序列号的十六进制表示形式。每个证书都有一个唯一的序列号。                                 |
| `has_private_key`| 表示 Elasticsearch 是否有权访问此证书的私钥。布尔值(`true` 或 `false`)。                   |
| `expiry`         | 证书过期时间。                                          |
| `issuer`         | 签发证书的证书颁发机构(CA)的名称。               |

1.别名: "http" —— 有效期2年、3年

  • 1.用途:

证书用于客户端与Elasticsearch之间的HTTP通信。这包括REST API调用、Kibana与Elasticsearch的连接等。

has_private_key设置为:true有效期2年,设置为:false,有效期三年。(无法确定has_private_key设置与证书年限的确切关系)

  • 2.有效期解读:

有效期设置为2年、3年的原因可能是为了提高安全性。

较短的有效期意味着即使证书被泄露,其被滥用的时间窗口也相对较短。此外,这迫使管理员定期更新证书,这是一种良好的安全实践,可以确保使用最新的加密标准和密钥。

2. 别名: "http_ca" —— 有效期3年

  • 1.用途:

以 "_ca" 结尾的别名通常表示这是一个 CA 证书,它用于签发和管理其他证书,如“http”证书。

  • 2.有效期解读:

CA证书的有效期通常比普通证书长或者一致,因为更新CA证书意味着所有由它签发的证书也需要更新。

3. 别名: "transport"、"transport_ca" —— 有效期100年

  • 1.用途:

“transport”别名的证书用于 Elasticsearch 节点间的传输层(Transport Layer)通信,这是集群内部节点之间进行数据同步和交换的加密通道。

  • 2.有效期解读:

有效期达100年(确切算是99年左右)的设置非常罕见(早期7.X版本是3年),通常反映了这是一个根证书或自签名证书,用于极长期的内部通信。

这种长期有效可能为了避免证书更新带来的潜在服务中断风险,尤其是在证书更新可能影响集群内部稳定性和连续性的环境中。

大白话:2-3年后,集群内部通信肯定正常,但是对外提供服务可能会有问题。

那么问题来了,如何更换呢?——管理员需要定期检查证书的有效期,并在证书接近到期时进行更新,以避免服务中断。

5、SSL证书更新前置主要知识点

建议参照各自集群对应版本的官方文档,以获取最准确和可靠的信息。

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

5.1 知识点1:更新策略就两大类

官方文档强调了,实际就分为两大类。

  • 第一类;使用原始证书颁发机构 (CA)更新证书。
  • 第二类:使用自己生成新颁发机构 (CA)更新证书。
策略1:使用原始证书颁发机构 (CA)更新证书

如果你仍然可以信任你的原始证书颁发机构(CA)且拥有用于签发现有节点证书的原始 CA 密钥和证书,你可以使用该 CA 来签发新证书。这是最直接的更新方式。

策略2:使用自己生成新颁发机构 (CA)更新证书

如果你需要信任组织中的新 CA,或者需要自己生成一个新 CA,你需要使用这个新 CA 来签发新的节点证书,并指导节点信任新 CA。

在这种情况下,你将使用新 CA 签名节点证书,并让你的节点信任这个证书链。

5.2 知识点2:系统每5秒“扫”一次,检查SSL资源的更新。

无论哪种情况,Elasticsearch 默认情况下都会以五秒的间隔监控 SSL 资源的更新。

官方说法:

“Regardless of the scenario, Elasticsearch monitors the SSL resources for updates by default, on a five-second interval. ”

要说明的是:Elasticsearch 会自动重新加载证书和密钥,但不会重新加载配置文件 elasticsearch.yml。

5.3 知识点3:要不要重启呢?

你只需将新的证书和密钥文件(或密钥库)复制到 Elasticsearch 配置目录中(注意不要改名,还是用之前的名称最靠谱),节点将检测到更改并重新加载密钥和证书。因此,大多数情况不需要重启。

但是,如果你需要更新 elasticsearch.yml 配置或更改存储在安全设置中的密钥或密钥库的密码,则必须执行滚动重启。因为,Elasticsearch 不会自动重新加载存储在安全设置中的密码更改。

滚动重启是官方强调的,英文名:“Rolling restarts are preferred”,本质上就是逐个重启集群中的节点,以避免同时中断所有服务,从而确保集群整体可以继续对外提供服务。

大白话总结:配置更新了这个必须得滚动重启,配置没更新则不要重启。

6、解决方案实现实操完整步骤

咱们知道传输层证书有效期 100年,一般不大需要动。

咱们只说一下 Http 证书更新不重启的极简步骤,以策略2:使用自己生成新颁发机构 (CA)更新证书,其他原理同,建议参见官网,不再赘述。

咱们之前博客完整记录了实现过程,建议务必参考:

云服务器 CentOS7 部署 Elasticsearch 8.0 + Kibana 8.0 指南

注意:将生成的新证书elastic-certificates.p12分发到集群中的每个节点上,替换掉各节点config目录下的旧证书文件。

如果不改配置,如前所述,不用重启即可。

如果更改了配置,建议滚动重启。

7、问题总结

更换SSL证书是保持Elasticsearch集群安全性的重要步骤。

通过以上步骤,我们可以确保集群中的数据传输继续保持加密状态,避免潜在的安全风险和服务中断。

8、未来注意事项

  • 定期检查证书有效期:

建议将证书有效期检查纳入日常维护任务,以避免证书意外过期。

  • 监控和告警:

通过监控工具跟踪SSL证书的有效期,并在证书即将过期时发出告警,确保足够的响应时间。

通过实施这些最佳实践,可以确保Elasticsearch集群的持续安全运行,及时应对SSL证书到期的挑战。

定期检查证书有效期参见脚本如下:

import requests
from requests.auth import HTTPBasicAuth
import json
 
# Elasticsearch集群的主机地址
es_host = "127.0.0.1"
# 认证信息
username = "elastic"
password = "changeme"
 
# 构造URL
url = f"https://{es_host}:9200/_ssl/certificates"
 
# 发送GET请求
response = requests.get(url, auth=HTTPBasicAuth(username, password), verify=False)
 
# 检查请求是否成功
if response.status_code == 200:
    # 解析返回的JSON数据
    certificates = response.json()
    # 打印证书信息
    print(json.dumps(certificates, indent=4))
else:
    print(f"Failed to retrieve certificates. Status code: {response.status_code}, Response: {response.text}")

正常会返回:


7 年+积累、 Elastic 创始人Shay Banon 等 15 位专家推荐的 Elasticsearch 8.X新书已上线


更短时间更快习得更多干货!

和全球 近2000+ Elastic 爱好者一起精进!

elastic6.cn——ElasticStack进阶助手

比同事抢先一步学习进阶干货!


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
3天前
|
安全 网络安全
如何给网站添加ssl安全证书
如何给网站添加ssl安全证书
11 1
|
4天前
|
安全 网络安全 Windows
【Azure App Service】遇见az命令访问HTTPS App Service 时遇见SSL证书问题,暂时跳过证书检查的办法
在访问App Service的KUDU工具或使用`az webapp deploy`时遇到SSL错误:`SSL: CERTIFICATE_VERIFY_FAILED`。解决方法是临时禁用Azure CLI的SSL验证。在PowerShell中,设置`$env:ADAL_PYTHON_SSL_NO_VERIFY`和`$env:AZURE_CLI_DISABLE_CONNECTION_VERIFICATION`为1;在Windows命令提示符中,使用`set AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1`。注意,这可能引入安全风险,应仅在必要时使用。
|
22天前
|
云安全 算法 数据建模
阿里云SSL证书免费版申请流程,收费版证书收费标准及证书类型选择参考
SSL证书是实现网站https访问必须购买的云安全类产品,现在很多用户在网站做好之后,下一步通常都是给网站域名购买SSL证书实现网站的https访问,阿里云提供申请SSL证书服务,现在每个阿里云个人或企业用户(以实名认证为准)每年可以一次性申请20张免费Digicert DV单域名试用证书(以下简称免费证书),本文为大家介绍具体的申请流程和收费证书的最新收费标准以及不同种类的证书选择参考。
阿里云SSL证书免费版申请流程,收费版证书收费标准及证书类型选择参考
|
9天前
|
存储 运维 监控
【elastic search】详解elastic search集群
【elastic search】详解elastic search集群
12 1
|
14天前
|
Docker 容器
docker 运行 elasticsearch + kibana + head 集群
docker 运行 elasticsearch + kibana + head 集群
|
8天前
|
缓存 安全 Java
Elasticsearch—生产环境集群核心配置
Elasticsearch—生产环境集群核心配置
15 0
|
1月前
|
安全 小程序 网络安全
阿里云腾讯云免费SSL证书托管系统的开发初衷
由于Google等公司推动,互联网安全趋势将SSL证书期限统一缩短至3个月,阿里云和腾讯云相继跟进。对于管理多个站点的小公司而言,手动维护变得繁琐。为自动化此过程,作者探索使用API解决方案。通过研究腾讯云API,成功实现证书的自动创建、审核和下载。为应对无免费到期提醒服务,作者创建计划任务,在证书到期前7天发送提醒,初期采用短信提醒,并增设公众号模板消息作为备选方案,完成到期提醒系统的构建。接下来的文章将讨论SSL证书的申请和下载流程。
57 2
|
1月前
部署elasticsearch集群 - 蓝易云
以上步骤完成后,你就成功部署了一个基本的Elasticsearch集群。根据你的需求,你可能还需要进行更多的优化和配置,例如设置副本数、调整内存设置等。
35 1
|
17天前
|
网络协议 安全 应用服务中间件
阿里云申请免费ssl证书并配置nginx
阿里云申请免费ssl证书并配置nginx
|
1月前
|
存储 机器学习/深度学习 搜索推荐
Elasticsearch 8.X 向量检索和普通检索能否实现组合检索?如何实现?
Elasticsearch 8.X 向量检索和普通检索能否实现组合检索?如何实现?
42 3