写点什么

将您自己的 SSL 证书添加到 Open Distro for Elasticsearch

  • 2019-10-05
  • 本文字数:0 字

    阅读完需:约 1 分钟

将您自己的 SSL 证书添加到 Open Distro for Elasticsearch

Open Distro for Elasticsearch 的安全插件自带即开即用的身份验证和访问控制功能。为方便上手,二进制发行版包含密码和 SSL 证书,供您试用插件。请先更改默认密码和证书,然后再添加任何私人数据。在上一篇文章中,我们向您展示了如何在 Open Distro for Elasticsearch 中更改管理员密码。在本文中,我们将介绍如何更改 SSL 证书。


要更改 SSL 证书,您需要将证书文件复制到此发行版中,并修改 elasticsearch.yml 来使用这些文件。我将介绍如何更改 Elasticsearch 节点到节点通信证书、REST API,以及如何将 Kibana 的后端通信更改为 Elasticsearch。我将介绍 Open Distro for Elasticsearch 的 RPM 和 Docker 发行版。

收集文件

在更改证书之前,您需要为证书和密钥生成(或配置)以下 .pem 文件:


  • Elasticsearch 管理员

  • Elasticsearch 节点

  • Kibana 节点

  • 证书颁发机构

  • 如果您想要支持 Kibana 连接 SSL,还需向 Kibana 添加证书。您可以使用 Elasticsearch 节点证书和 Kibana 密钥文件,或者使用单独的证书。


您可以使用多种方法创建 CA 和证书。您可能配有证书颁发机构 (CA),用于在您的组织中发放证书。如果是这样,请善加利用。如果您无权访问自己的 CA,可以使用 Open Distro for Elasticsearch 随带的演示文件。您也可以使用 OpenSSL,创建 CA,然后使用 CA 来创建和签署证书。在本文中,我将介绍如何复制演示文件,以及如何使用 OpenSSL 创建 CA 和证书。


首先,创建目录来保存要构建的各种资产:


$ mkdir setup-ssl
复制代码


使用演示 .pem 文件


下载并安装 Open Distro for Elasticsearch RPM,或者在 Docker 中运行 Open Distro for Elasticsearch(参阅启动并运行 Open Distro for Elasticsearch,了解如何在本地运行 Docker 的相关说明)。演示 .pem 文件位于不同的目录中,具体取决于您所运行的发行版:


Docker:/usr/share/elasticsearch/configRPM:/etc/elasticsearch
复制代码


将 kirk.pem、kirk-key.pem、esnode.pem、esnode-key.pem 和 root-ca.pem 复制到 setup-ssl 目录。


如果您运行的是 Docker,请使用:


 $ docker exec <container id> cat /usr/share/elasticsearch/config/filename.pem > filename2.pem
复制代码


将文件传送到您的计算机上。将 替换为某个 Elasticsearch 容器的 ID。将 filename.pem 和 filename2.pem 替换为上述文件。


如果您运行的是 RPM,只需将文件复制到 setup-ssl 目录。


创建新的证书颁发机构 (CA)、节点和管理员证书


若要创建 CA 和新证书,请使用 OpenSSL 创建本地自签名证书颁发机构 (CA)。您还可以创建服务器和管理员证书。然后,使用 CA 签署证书。


要安装 OpenSSL,请运行以下命令。您可以在 OpenSSL 网站找到最新版本:


 $ sudo yum -y install openssl 
复制代码


首先,为 CA 创建私有密钥:


$ openssl genrsa -out MyRootCA.key 2048Generating RSA private key, 2048 bit long modulus................+++...............................+++e is 65537 (0x10001)
复制代码


创建 CA 并输入组织详细信息:


$ openssl req -x509 -new -key MyRootCA.key -sha256 -out MyRootCA.pemYou are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.----Country Name (2 letter code) [AU]:GBState or Province Name (full name) [Some-State]:Locality Name (eg, city) []:LondonOrganization Name (eg, company) [Internet Widgits Pty Ltd]:Example CorpOrganizational Unit Name (eg, section) []:Common Name (e.g. server FQDN or YOUR name) []:Example Corp CA RootEmail Address []:
复制代码


针对服务器和管理员证书,创建密钥、证书签名请求 (CSR) 和


CA 签署的证书。在以下示例中,我将逐个执行一个服务器的


命令 – “odfe-node1”。您需要对 odfe-node2、


管理员证书和 kibana 证书重复这一流程:


 $ openssl genrsa -out odfe-node1-pkcs12.key 2048 
复制代码


重要提示:将其转换为 PKCS#5 v1.5,以正确使用 JDK。此命令的输出


将用于所有配置文件。


 $ openssl pkcs8 -v1 "PBE-SHA1-3DES" -in "odfe-node1-pkcs12.key" -topk8 -out "odfe-node1.key" -nocrypt
复制代码


创建 CSR 并输入组织和服务器详细信息:


$ openssl req -new -key odfe-node1.key -out odfe-node1.csrYou are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value, If you enter '.', the field willbe left blank.----Country Name (2 letter code) [AU]:GBState or Province Name (full name) [Some-State]:Locality Name (eg, city) []:LondonOrganization Name (eg, company) [Internet Widgits Pty Ltd]:Example CorpOrganizational Unit Name (eg, section) []:Common Name (e.g. server FQDN or YOUR name) []:odfe-node1.example.comEmail Address []:Please enter the following 'extra' attributes to be sent with your certificate requestA challenge password []:An optional company name []:
复制代码


使用 CSR 生成签名证书:


$ openssl x509 -req -in odfe-node1.csr -CA MyRootCA.pem -CAkey MyRootCA.key -CAcreateserial -out odfe-node1.pem -sha256Signature oksubject=/C=GB/ST=Some-State/L=London/O=Example Corp/CN=odfe-node1.example.comGetting CA Private Key
复制代码

编辑 elasticsearch.yml 以添加证书

现在,您需要使用已创建或复制到 setup-ssl 的证书。无论您运行的是 Open Distro for Elasticsearch 的 .rpm 发行版,还是 Docker 发行版,您都要编辑 elasticsearch.yml 以添加证书信息。这会使 Open Distro for Elasticsearch 的安全插件接受 SSL 请求,还会实现点对点 SSL 通信。在 setup-ssl 目录中创建 elasticsearch.yml 副本。您可以在与 .pems 相同的目录中找到 elasticsearch.yml。


使用您喜欢的编辑器打开 elasticsearch.yml 的本地副本。您将看到一系列以下列内容开头的设置:


######## Start OpenDistro for Elasticsearch Security Demo Configuration ######### WARNING: revise all the lines below before you go into productionopendistro_security.ssl.transport.pemcert_filepath: esnode.pemopendistro_security.ssl.transport.pemkey_filepath: esnode-key.pemopendistro_security.ssl.transport.pemtrustedcas_filepath: root-ca.pem...
复制代码


opendistro_security.ssl.transport.* 设置可实现节点间的 SSL 传输。opendistro_security.ssl.http.* 可为集群的 REST 请求启用 SSL。您需要用自己的证书文件替换这些变量的值。


请确保删除以下条目:


opendistro_security.allow_unsafe_democertificates: true
复制代码


以使用您的证书替换演示证书。


您还可以添加可分辨名称 (DN) 验证设置来进一步提高安全性,如下所示。安全插件支持通配符和正则表达式:


opendistro_security.nodes_dn:    - 'CN=node2.example.com,OU=SSL,O=Example Corp,L=London,C=GB'    - 'CN=*.example.com,OU=SSL,O=Example Corp,L=London,C=GB'    - 'CN=odfe-cluster*'- '/CN=.*regex/'
复制代码


如果您运行的是 .rpm 发行版,请将您的证书和 elasticsearch.yml 复制到 /etc/elasticsearch/config 目录。请更改文件名以匹配您的证书文件名称。


针对容器部署,通过修改 docker- composition .yml 可使用本地文件覆盖容器中的文件。在编辑器中打开此文件,找到 odfe-node1 和 odfe-node2 服务的“volumes”部分。在这些部分中添加其他行,将本地文件映射到容器的文件系统。完成后,应如下所示:


version: '3'services:  odfe-node1:    image: amazon/opendistro-for-elasticsearch:0.7.0    container_name: odfe-node1    environment:      - cluster.name=odfe-cluster      - bootstrap.memory_lock=true # along with the memlock settings below, disables swapping      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" # minimum and maximum Java heap size, recommend setting both to 50% of system RAM    ulimits:      memlock:        soft: -1        hard: -1    volumes:      - odfe-data1:/usr/share/elasticsearch/data      - ./MyRootCA.pem:/usr/share/elasticsearch/config/MyRootCA.pem      - ./odfe-node1.pem:/usr/share/elasticsearch/config/odfe-node1.pem      - ./odfe-node1.key:/usr/share/elasticsearch/config/odfe-node1.key      - ./node1-elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml    ports:      - 9200:9200      - 9600:9600 # required for Performance Analyzer    networks:      - odfe-net  odfe-node2:    image: amazon/opendistro-for-elasticsearch:0.7.0    container_name: odfe-node2    environment:      - cluster.name=odfe-cluster      - bootstrap.memory_lock=true      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"      - discovery.zen.ping.unicast.hosts=odfe-node1    ulimits:      memlock:        soft: -1        hard: -1    volumes:      - odfe-data2:/usr/share/elasticsearch/data      - ./MyRootCA.pem:/usr/share/elasticsearch/config/MyRootCA.pem      - ./odfe-node2.pem:/usr/share/elasticsearch/config/odfe-node2.pem      - ./odfe-node2.key:/usr/share/elasticsearch/config/odfe-node2.key      - ./node2-elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml    networks:      - odfe-net.....
复制代码

对 Kibana 的访问权限进行加密

通过在 kibana.yml 中设置以下 server.ssl 选项,您可以在浏览器和 Kibana 服务器之间启用 TLS / SSL 加密。具体位置取决于您所运行的发行版:


Docker:/usr/share/kibana/configRPM:/etc/kibanaserver.ssl.enabled: trueserver.ssl.key: <full path to your key file>server.ssl.certificate: <full path to your certificate>
复制代码


如果您运行的是 .rpm 发行版,请将证书复制到 /etc/kibana/ 目录并在 kibana.yml 中更新 ssl 设置。


针对容器部署,通过在 volumes 部分添加文件映射,同时在环境部分添加 SERVER_SSL 选项,来更新 docker-compose.yml 文件中的 Kibana 部分。


.....  kibana:    image: amazon/opendistro-for-elasticsearch-kibana:0.7.0    container_name: odfe-kibana    ports:      - 5601:5601    expose:      - "5601"    environment:      ELASTICSEARCH_URL: https://odfe-node1:9200      SERVER_SSL_ENABLED: "true"      SERVER_SSL_KEY: /usr/share/kibana/config/odfe-node2.key      SERVER_SSL_CERTIFICATE: /usr/share/kibana/config/odfe-node2.pem    volumes:      - ./MyRootCA.pem:/usr/share/kibana/config/MyRootCA.pem      - ./odfe-node2.pem:/usr/share/kibana/config/odfe-node2.pem      - ./odfe-node2.key:/usr/share/kibana/config/odfe-node2.key    networks:      - odfe-net .....
复制代码

重启您的环境

现在,您需要重启 Elasticsearch。您需要删除现有卷,才能从安全插件的 Elasticsearch 索引中删除演示证书。从包含 docker-compose.yml 的目录中,发出以下命令:


NOTE! the following commands will erase all data that you have in Elasticsearch!


docker-compose down -vdocker-compose up
复制代码


您应该能够浏览 https://:5601/。您可能需要注销 Kibana 的 UI,才能在登录之前删除任何浏览器缓存的证书。


要在浏览器中禁用安全警告,您可以使用其设置面板将自签名 MyRootCA 证书添加到可信证书颁发机构。

小结

通过添加自己的 SSL 证书,您现已提高 Open Distro for Elasticsearch 集群的安全性。您的证书包括(可选)从浏览器到 Kibana 的通信、到 Elasticsearch 终端节点的通信,以及节点间的集群内通信。


有问题或疑问? 希望参与讨论? 您可以在我们的论坛上获得帮助并讨论 Open Distro for Elasticsearch。您可以在这里提出问题。


作者介绍:


agadeesh Pusapadi


Jagadeesh Pusapadi 是 AWS 的解决方案架构师,负责与客户就其战略计划进行合作。他通过提供架构指导,帮助客户在 AWS 云上构建创新解决方案,以实现预期的业务成果。


Jon Handler


Jon Handler (@_searchgeek) 是总部位于加利福尼亚州帕罗奥图市的 Amazon Web Services 的首席解决方案架构师。Jon 与 CloudSearch 和 Elasticsearch 团队密切合作,为想要将搜索工作负载迁移到 AWS 云的广大客户提供帮助和指导。在加入 AWS 之前,Jon 作为一名软件开发人员,曾为某个大型电子商务搜索引擎编写代码长达四年。Jon 拥有宾夕法尼亚大学的文学学士学位,以及西北大学计算机科学和人工智能理学硕士和博士学位。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/add-ssl-certificates-open-distro-for-elasticsearch/


2019-10-05 21:16920
用户头像

发布了 1600 篇内容, 共 70.8 次阅读, 收获喜欢 67 次。

关注

评论

发布
暂无评论
发现更多内容

最新Github霸榜标星96K!号称Java八股“PLUS”版,限时开源!

Java编程日记

Java 程序员 架构 Java 面试 java程序员

三大升级!百度智能云加速文心一言产业化落地

百度开发者中心

#人工智能 文心一言

【数仓运维实践】关于GaussDB(DWS)单SQL磁盘空间管控

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

中国券商数字化转型趋势报告2023

易观分析

金融 券商 经济

《流浪地球2》里的机器人企业,如何高质量地交付产品?

万事ONES

宝刀未老?低代码何德何能受大厂们的推崇

这我可不懂

低代码 数字化 大厂 JNPF

2023年市场快速恢复,社交资讯营销如何把握新机遇

易观分析

社交 资讯

软件测试/测试开发丨app自动化测试之Capability 使用进阶

测试人

软件测试 自动化测试 测试开发 appium capability

百度智能云将在3月27日发布系列文心一言云服务和应用产品

百度开发者中心

#人工智能 文心一言

火山引擎DataTester:抖音的设计团队是如何用A/B测试实现高效优化的?

字节跳动数据平台

大数据 AB testing实战 抖音 A/B 测试 企业号 3 月 PK 榜

MobPush,专业和免费的消息推送SDK

MobTech袤博科技

远程控制电脑软件哪个好?

RayLink

远程控制软件 远控软件 远程桌面连接

MobPush Android SDK合规指南

MobTech袤博科技

数仓发展史:大数据的“底气”来自于哪?

鼎道智联

大数据 数据仓库

使用 CnosDB 与 TensorFlow 进行时间序列预测

CnosDB

tensorflow 时序数据库 时间序列预测 CnosDB

2023腾讯最新发布JVM调优笔记,轻松拿捏JVM面试,调优

开心学Java

Java JVM GC

直播|SeaTunnel 与 StarRocks 生态融合--让大数据处理回归「简单」

StarRocks

数据库 数据库·

对话 BitSail Contributor | 吴畅:从好奇,到深入

字节跳动数据平台

大数据 开源 开发者 数据集成 企业号 3 月 PK 榜

你掌握了吗?在PCB设计中,又快又准地放置元件

攻城狮华哥

模块 元器件 PCB 原理图 PCB设计

计算界年度大赛“先导杯”再度来袭!

科技热闻

数字孪生智慧停车场三维可视化管理云平台

2D3D前端可视化开发

智慧停车场 停车场三维可视化 数字孪生智慧停车 无人值守停车场 停车场物联网系统

镜舟数据库与用友 YonBIP 完成兼容性认证,携手赋能企业数智化发展

镜舟数据库

数据库

腾讯首席架构师亲自码出的“Redis深度笔记”PDF版限时分享

开心学Java

Java 数据库 redis 腾讯

天天预约|新功能工具「美团优惠券」上线啦!

天天预约

虚拟机专用Win10/win11系统镜像下载(m1/intel合集)

真大的脸盆

Mac win10 Mac 软件 win11 win镜像文件

Github霸榜!由阿里出品的最新java面试极速突击核心讲

Java编程日记

Java 架构 面试 java程序员 java面试

捷讯!索信达中标光大银行“线上流量经营模型工厂”项目

索信达控股

云智一体,深入生命科学

百度开发者中心

云智一体 生命科学 #人工智能

对话抖音电商:量级庞大、参差不齐,“数据质量治理”有妙招!

字节跳动数据平台

大数据 数据治理 电商 抖音 企业号 3 月 PK 榜

基于ByteHouse构建实时数仓实践

字节跳动数据平台

数据库 云原生 Clickhouse 企业号 3 月 PK 榜

软件测试/测试开发丨只懂黑盒测试也能学会的代码覆盖率及精准化测试

测试人

软件测试 自动化测试 精准测试 测试开发 代码覆盖率

将您自己的 SSL 证书添加到 Open Distro for Elasticsearch_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章