当前位置:首页>python>3python之es集群证书生成与启用

3python之es集群证书生成与启用

  • 2026-09-12 20:03:29
3python之es集群证书生成与启用

写在前面的话

生活之殇。昨天,有一个小伙来上号,说是顺丰小哥介绍的。我说到时给小哥发15块红包。小伙说:你这有啥活吗,我什么都能做,不怕吃苦,现在就需要钱。我说:真有一个,现在推荐上人,成功一个,15块钱,但我还有一个团长的活,就是你拉10个人建个小群,到时,我这边收三成,你收三成,给小群里的人四成,细水长流,你每天都有钱花,后期啥也不用干了,周四提现数钱就行了,我建议你当团长。小伙说:哥,我听你的。转头往我大群里拉个人,对我说:有15块红包吧,哥。我有点无奈,我刚才白说了,是吗?我说:发红包这个是一锤子买卖,你呀,太急功近利了,对他有点讨厌。小伙说:哥,我得尿毒症了,急要钱换肾。一句话让我哑口无言,看来是我错怪小伙了,真的抱歉。

[197+100]-------->底部有张生活照片(头条号运营:大家想全托管上号的联系我哦,每天让你得个早餐钱,微信号: qhz_toutiao)

【关键词】python、ragflow、es集群、生成证书

一、es集群证书生成与启用(三级)

描述:需要给es集群中的节点设置证书,这样才能启用安全模块,进而改密码。

开工:

第一步:设置证书(四级)

20250514周三时间段:00:00-01:00

现在验证证书报错,如下:

图3a-1

注:这个解决方法是重新生成证书,并且设置密码。

第二步:重新生成证书(四级)

20250514周三时间段:00:14-01:00

如果确实忘记了密码,建议重新生成证书:

3.1 删除旧证书
sudo rm /home/admin/es/certs/elastic-nodes.p12
3.2 重新生成 PKCS#12 证书(明确设置密码)
docker run --rm -it \
  -v /home/admin/es/certs:/usr/share/elasticsearch/config/certs \
  -u 1000:1000 \
  docker.elastic.co/elasticsearch/elasticsearch:8.11.3 \
  openssl pkcs12 -export \
  -in /usr/share/elasticsearch/config/certs/elastic-nodes/elastic-nodes.crt \
  -inkey /usr/share/elasticsearch/config/certs/elastic-nodes/elastic-nodes.key \
  -out /usr/share/elasticsearch/config/certs/elastic-nodes.p12 \
  -name elastic-nodes \
  -passout pass:myPassword123  # 设置您能记住的密码
3.3 验证新证书
sudo openssl pkcs12 -info -in /home/admin/es/certs/elastic-nodes.p12 -nodes -passin pass:myPassword123

注:此时还是报错如下:

admin@zero2  ~/es/certs  ➜ docker run --rm -it \
➜   -v /home/admin/es/certs:/usr/share/elasticsearch/config/certs \
➜   -u 1000:1000 \
➜   docker.elastic.co/elasticsearch/elasticsearch:8.11.3 \
➜   openssl pkcs12 -export \
➜   -in /usr/share/elasticsearch/config/certs/elastic-nodes/elastic-nodes.crt \
➜   -inkey /usr/share/elasticsearch/config/certs/elastic-nodes/elastic-nodes.key \
➜   -out /usr/share/elasticsearch/config/certs/elastic-nodes.p12 \
➜   -name elastic-nodes \
➜   -passout pass:YourPassword123  # 设置您能记住的密码

admin@zero2  ~/es/certs  ➜ ll
total 20K
drwxr-xr-x 2 root root 4.0K May 13 15:36 ca
-rw------- 1 zero root 2.5K May 13 23:36 ca.zip
drwxr-xr-x 2 root root 4.0K May 13 15:45 elastic-nodes
-rw------- 1 zero zero 2.5K May 14 00:14 elastic-nodes.p12
-rw------- 1 zero zero 2.7K May 13 23:45 elastic-nodes.zip

admin@zero2  ~/es/certs  ➜ sudo openssl pkcs12 -info -in /home/admin/es/certs/elastic-nodes.p12 -nodes -passin pass:YourPassword123
MAC: sha1, Iteration 2048
MAC length: 20, salt length: 8
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Error outputting keys and certificates
4087C7C6C8740000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:../crypto/evp/evp_fetch.c:386:Global default library context, Algorithm (RC2-40-CBC : 0), Properties ()

admin@zero2  ~/es/certs  ➜ 

注:这个原因是加密算法太弱了,因为 OpenSSL 3.x 默认禁用了较弱的加密算法(如 RC2-40)。

第三步:加密算法太弱(四级)

20250514周三时间段:00:19-01:00

解决方案如下:

使用更安全的加密算法重新生成 PKCS#12 文件

docker run --rm -it \
  -v /home/admin/es/certs:/usr/share/elasticsearch/config/certs \
  -u 1000:1000 \
  docker.elastic.co/elasticsearch/elasticsearch:8.11.3 \
  openssl pkcs12 -export \
  -in /usr/share/elasticsearch/config/certs/elastic-nodes/elastic-nodes.crt \
  -inkey /usr/share/elasticsearch/config/certs/elastic-nodes/elastic-nodes.key \
  -out /usr/share/elasticsearch/config/certs/elastic-nodes.p12 \
  -name "elastic-nodes" \
  -passout pass:YourPassword123 \
  -certpbe AES-256-CBC \
  -keypbe AES-256-CBC \
  -macalg sha256

注:这样能生成,截图如下:

图3a-2

注:接下来,验证证书。

第四步:验证证书(四级)

20250514周三时间段:00:26-01:00
sudo openssl pkcs12 -info -in /home/admin/es/certs/elastic-nodes.p12 -nodes

注:输入密码,是可以的,截图如下:

图3a-3

注:接下来,单启动一个节点看看效果。

启动报错如下:

图3a-4

第五步:启动zero2报错处理(四级)

20250514周三时间段:00:39-01:00

处理如下:

在 zero2 上为 Elasticsearch 集群安装证书并启用安全模块的方案

基于您提供的配置,我将以 zero2 为例,说明如何在不使用挂载的情况下为 Elasticsearch 集群安装证书并启用安全模块。

方案概述

由于不使用挂载方式,我们需要在构建 Docker 镜像时直接将证书文件包含进去,并通过环境变量配置证书密码。

具体步骤

1. 准备证书文件

首先需要在 zero2 上生成或获取证书文件:

# 在 zero2 上执行
cd /path/to/your/project/docker/elasticsearch

# 生成 PKCS12 格式的证书(如果还没有)
openssl pkcs12 -export -in cert.pem -inkey key.pem -out elastic-nodes.p12 -name "elastic-nodes" -password pass:YourPassword123
2. 修改 Dockerfile.elastic

更新 Dockerfile.elastic 以包含证书和配置:

ARG ES_VERSION

FROM docker.elastic.co/elasticsearch/elasticsearch:${ES_VERSION}

# 修改目录权限
USER root

# 创建证书目录并设置权限
RUN mkdir -p /usr/share/elasticsearch/config/certs && \
    chown -R 1000:0 /usr/share/elasticsearch && \
    chmod -R 777 /usr/share/elasticsearch

# 复制证书文件
COPY elasticsearch/elastic-nodes.p12 /usr/share/elasticsearch/config/certs/

# 设置证书文件权限
RUN chmod 640 /usr/share/elasticsearch/config/certs/elastic-nodes.p12 && \
    chown 1000:0 /usr/share/elasticsearch/config/certs/elastic-nodes.p12

USER elasticsearch
3.创建 zero2 特定的环境文件

创建 .zero2.env 文件(与 docker-compose-base.yml 同级):

# zero2 特定配置
ELASTIC_PASSWORD=your_secure_password_here
CERT_PASSWORD=YourPassword123
4.修改 docker-compose-base.yml

更新环境变量部分:

environment:
  - network.host=0.0.0.0
  - network.publish_host=${HOSTNAME}
  - transport.publish_host=${HOSTNAME}
  - node.name=${HOSTNAME}
  - cluster.name=ragflow-cluster
  - discovery.seed_hosts=zero2:9300,zero3:9300,zero4:9300
  - network.bind_host=0.0.0.0
  - transport.port=9300
  - node.roles=master,data,ingest
  - bootstrap.memory_lock=true
  - ES_JAVA_OPTS=-Xms30g -Xmx30g
  - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
  # 添加证书相关环境变量
  - xpack.security.transport.ssl.keystore.password=${CERT_PASSWORD}
  - xpack.security.transport.ssl.truststore.password=${CERT_PASSWORD}
  - xpack.security.http.ssl.keystore.password=${CERT_PASSWORD}
  - xpack.security.http.ssl.truststore.password=${CERT_PASSWORD}
5. 构建并启动容器
# 在 zero2 上执行
cd /path/to/your/project/docker
./build_pub_es_service.sh

注:运行报错,截图如下:

图3a-5

注:证书不正确,需要重新生成证书。如下:

# 进入项目目录
cd /path/to/your/project/docker/elasticsearch

# 创建临时目录
mkdir -p certs && cd certs

# 1. 生成 CA 证书
openssl genrsa -out ca.key 2048
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/CN=elastic-ca"

# 2. 生成节点证书
openssl genrsa -out elastic-nodes.key 2048
openssl req -new -key elastic-nodes.key -out elastic-nodes.csr -subj "/CN=zero2"
openssl x509 -req -days 3650 -in elastic-nodes.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out elastic-nodes.crt

# 3. 创建 PKCS12 格式的证书(包含私钥和证书链)
openssl pkcs12 -export -in elastic-nodes.crt -inkey elastic-nodes.key \
  -chain -CAfile ca.crt -name "elastic-nodes" \
  -out ../elastic-nodes.p12 -password pass:YourPassword123

# 验证证书内容
openssl pkcs12 -info -in ../elastic-nodes.p12 -nokeys -passin pass:YourPassword123
6. 验证集群安全配置
# 验证 HTTPS 访问
curl -k -u elastic:your_secure_password_here https://zero2:9200

# 验证集群状态
curl -k -u elastic:your_secure_password_here https://zero2:9200/_cluster/health?pretty

注意事项

  1. 证书一致性:三台机器上的 elastic-nodes.p12 证书文件必须完全相同,否则节点间无法建立安全连接。

  2. 密码安全:证书密码(YourPassword123)和管理员密码(your_secure_password_here)应该使用强密码,并在生产环境中妥善保管。

  3. 文件权限:虽然设置了宽松的权限(777)以简化问题排查,但在生产环境中应根据最小权限原则设置更严格的权限。

  4. 集群初始化:第一次启动集群时,可能需要先在一台机器上以单节点模式启动初始化集群,然后再加入其他节点。

  5. 证书更新:如果需要更新证书,需要重新构建所有节点的 Docker 镜像并重启容器。

这个方案通过在构建镜像时包含证书文件,并使用环境变量配置证书密码,实现了不依赖挂载的安全集群配置。其他节点(zero3 和 zero4)可以采用相同的配置方式,只需确保使用相同的证书文件和相应的主机名配置。

二、头条战果汇报

昨日数据来啦,昨日总收入:970.5,昨日总播放:873.6万,软件截图如下:

图3b-1

注:想要全脱管运营头条号的联系我,你出账号,我来运营,保你天天有钱花,咨询电话: 17701328814(微信同号),也可以加群先了解一下。

图3b-2

注:个人微信如下,欢迎骚扰。

图3b-3

三、生活照片

拍摄于‎2025‎年‎11‎月‎4‎日,‏‎16:21:10,二宝给老妈在家抓拍的,老妈鬓角都有了成缕白发,愿老妈青春永驻,健康长寿。其实,人不能冲动,冲动是魔鬼,容易做错事。就拿之前我非常不理解的一个姐来说,她妈妈就差一个实名认证了,怎么说就是不理了。后来才知道,人家出国了,没看到我发的几十条消息,国外有的不用微信。再说回这个小伙,我本想让他当团长,做个细水长流的挣钱之人,但他嘴上说同意,转手拉人挣快钱,但他不说有尿毒症,我可能一直误会他呢。所以,接下来的推广,不管遇到什么人什么事,都要冷静,要多理解他人的苦衷,做个性格平稳的人,我觉得这也是挣钱之道,一个易怒的人是不太容易挣到钱的。

图3c-1

《本文完》

最新文章

随机文章