暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

翻译-elasticsearch加密通信

kpxiaoxm 2021-06-29
973

elasticsearch加密通信

Elastic Stack 安全特性使您能够加密与Elasticsearch集群之间的通信。使用传输层安全性(TLS/SSL)保护连接。
警告:未启用加密的集群以明文发送包括密码在内的所有数据。如果启用了Elasticsearch安全特性,除非您拥有试用许可证,否则必须为节点间通信配置SSL/TLS。
要启用加密,您需要在集群中的每个节点上执行以下步骤:
1、验证 xpack.security.enabled 设置为 true 。有关更多信息,请参见安全设置。
2、生成私钥和X.509证书。
3、将每个节点配置为:
    a. 必需:在传输层上启用TLS。
    b. 建议:在HTTP层上启用TLS。
4、如果您正在使用Active Directory用户身份验证,请对Elasticsearch和Active Directory服务器之间的通信进行加密。
5、如果使用LDAP用户身份验证,请对Elasticsearch和LDAP服务器之间的通信进行加密。
有关跨弹性堆栈加密通信的详细信息,请参阅加密通信。

一、生成节点证书

TLS需要X.509证书来对与之通信的应用程序执行加密和身份验证。
为了使节点之间的通信真正安全,必须验证证书。
在Elasticsearch集群中,验证证书真实性的推荐方法是信任签署证书的证书颁发机构(CA)。
这样,当节点被添加到您的集群中时,它们只需要使用由相同CA签名的证书,节点就自动被允许加入集群。
此外,建议证书包含与节点的IP地址和DNS名称对应的主题替代名称(SAN),以便能够执行主机名验证
elasticsearch-certutil 命令简化了为 Elastic Stack 生成证书的过程。
它负责生成CA并与CA签署证书。它可以交互使用,也可以通过使用输入文件以静默模式使用。它还支持生成证书签名请求(CSR),以便可以使用特定于商业或组织的CA对证书进行签名。例如:

1、可选:为您的Elasticsearch集群创建证书颁发机构

例如,使用 elasticsearch-certutil ca 命令:
    bin/elasticsearch-certutil ca
    您可以配置集群来信任所有拥有证书的节点,这些证书已经由这个CA签署。
    此文件是 PKCS#12 密钥存储库,其中包含您的 CA的共证书 和 用于为每个节点签署证书的私钥
    elasticsearch-certutil 命令还提示输入保护文件和密钥的密码
    如果您计划将来向集群添加更多节点,请保留该文件的副本并记住其密码。

    2、为集群中的每个节点生成证书和私钥

    例如,使用 elasticsearch-certutil cert  命令:
      bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
      输出是单个 PKCS#12 密钥存储库,其中包括节点证书、节点密钥和CA证书。
          单独一个PKCS#12文件包含太多信息,不是很安全,如果想把CA证书、节点证书、节点密钥拆分,请使用以下方法:
          生成CA证书:
          openssl pkcs12 -in elastic-stack-ca.p12 -clcerts -nokeys -out elastic-stack-ca.crt
          生成节点证书和密钥:
          bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 -pem
          命令执行成功将得到一个certificate-bundle.zip压缩包,里面包含两个文件:instance.crt(证书+钥)和instance.key(私钥)
      系统还会提示您输入密码。您可以为证书和密钥输入密码,也可以按enter键将密码留空。
      默认情况下,elasticsearch-certutil 生成的证书中没有主机名信息(也就是说,它们没有任何主题替代名称字段)。这意味着您可以为集群中的每个节点使用证书,但是您必须关闭主机名验证,如下面的配置所示。
          如何关闭主机名验证:xpack.security.transport.ssl.verification_mode 的值不要是full
          xpack.security.transport.ssl.verification_mode
          控制证书的验证。有效值:
          full,它验证提供的证书是否由受信任的权威机构(CA)签名,还验证服务器的主机名(或IP地址)是否与证书中标识的名称匹配。
          certificate,它验证所提供的证书是否由受信任的权威机构(CA)签名,但不执行任何主机名验证。
          none,它不执行对服务器证书的验证。这种模式禁用了SSL/TLS的许多安全优势,只有在非常仔细地考虑之后才能使用。它主要用作试图解决TLS错误时的临时诊断机制;强烈反对它在生产集群上的使用。
          默认值为full
      如果希望在集群中使用主机名验证,请为每个节点运行一次 elasticsearch-certutil cert 命令,并提供 --name、--dns和--ip选项。
          例如:
          ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --ip 192.168.20.94,127.0.0.1 --out config/certs/cert.p12 --days 3660
          注意:您应该保护输出文件,因为它们包含实例的私钥。
          如果希望生成的证书是PEM格式的,就在上面的命令中增加 -pem 参数

      另外,如果希望使用商业或特定于组织的CA,可以使用 elasticsearch-certutil csr 命令为集群中的节点生成证书签名请求(csr)。有关更多信息,请参见elasticsearch-certutil

      3、可选:为加密HTTP客户端通信生成额外的证书

      例如,使用elasticsearch-certutil http命令:
        bin/elasticsearch-certutil http
        这个命令指导您完成生成用于Elasticsearch和Kibana的适当证书的过程。如果为集群创建了CA,可以在提示时提供其位置,从而重用它。

        4、将节点证书复制到适当的位置

        将适用的文件复制到每个节点上的Elasticsearch配置目录中。
        对于要配置的每个附加弹性产品,将证书复制到相关的配置目录。
        注意:如果您选择不使用elasticsearch-certutil,那么您获得的证书必须同时允许 clientAuth 和 serverAuth (如果存在扩展密钥使用扩展)。证书必须是PEM或PKCS#12格式。尽管不是必需的,但强烈建议证书包含节点的DNS名称和/或IP地址,以便使用主机名验证。

        二、加密集群中节点之间的通信

        传输网络层用于集群中节点之间的内部通信。启用安全特性(xpack.security.enabled 设置为 true时,必须使用TLS来确保节点之间的通信是加密的。

        1、生成节点证书 

        2、启用TLS并指定访问节点证书所需的信息

        PKCS#12 格式

        如果签名的证书是 PKCS#12 格式的,那么在每个节点上的 elasticsearch.yml 文件中添加以下信息:
          xpack.security.transport.ssl.enabled: true
          xpack.security.transport.ssl.verification_mode: certificate ①
          xpack.security.transport.ssl.keystore.path: elastic-certificates.p12 ②
          xpack.security.transport.ssl.truststore.path: elastic-certificates.p12 ③
          ① 如果在elasticsearch-certutil cert 命令中使用 --dns 或 --ip 选项,并且希望启用严格的主机名检查,请将验证模式设置为 full。有关这些值的描述,请参见传输TLS/SSL设置。
              xpack.security.transport.ssl.verification_mode
              控制证书的验证。有效值:
              full,它验证提供的证书是否由受信任的权威机构(CA)签名,还验证服务器的主机名(或IP地址)是否与证书中标识的名称匹配。
              certificate,它验证所提供的证书是否由受信任的权威机构(CA)签名,但不执行任何主机名验证。
              none,它不执行对服务器证书的验证。这种模式禁用了SSL/TLS的许多安全优势,只有在非常仔细地考虑之后才能使用。它主要用作试图解决TLS错误时的临时诊断机制;强烈反对它在生产集群上的使用。
              默认值为full。
          ② 如果为每个节点创建了单独的证书,那么可能需要在每个节点上定制此路径。例如,如果文件名与节点名匹配,您可以使用${node.name}.p12格式。
          ③ elasticsearch-certutil 输出 PKCS#12 密钥存储库,其中包括作为受信任的证书条目的CA证书。这允许将密钥存储库也用作信任存储库。在这种情况下,路径值应该与 keystore.path 的值匹配。但是请注意,这不是一般的规则。有些密钥存储库不能用作信任存储库,只有专门设计的密钥存储库可以。

          PEM 格式

          如果证书是PEM格式的,那么在每个节点上的 elasticsearch.yml 文件中添加以下信息:
            xpack.security.transport.ssl.enabled: true
            xpack.security.transport.ssl.verification_mode: certificate ①
            xpack.security.transport.ssl.key: home/es/config/node01.key ②
            xpack.security.transport.ssl.certificate: home/es/config/node01.crt ③
            xpack.security.transport.ssl.certificate_authorities: [ "/home/es/config/ca.crt" ] ④
            ① 如果在elasticsearch-certutil cert 命令中使用 --dns 或 --ip 选项,并且希望启用严格的主机名检查,请将验证模式设置为 full。有关这些值的描述,请参见传输TLS/SSL设置。
                xpack.security.transport.ssl.verification_mode
                控制证书的验证。有效值:
                full,它验证提供的证书是否由受信任的权威机构(CA)签名,还验证服务器的主机名(或IP地址)是否与证书中标识的名称匹配。
                certificate,它验证所提供的证书是否由受信任的权威机构(CA)签名,但不执行任何主机名验证。
                none,它不执行对服务器证书的验证。这种模式禁用了SSL/TLS的许多安全优势,只有在非常仔细地考虑之后才能使用。它主要用作试图解决TLS错误时的临时诊断机制;强烈反对它在生产集群上的使用。
                默认值为full。
            ② 节点密钥文件的完整路径。这必须是 Elasticsearch 配置目录 中的一个位置。
            ③ 节点证书的完整路径。这必须是 Elasticsearch 配置目录 中的一个位置。
            ④ 应该信任的CA证书的路径数组。这些路径必须是Elasticsearch配置目录中的一个位置。

            3、如果您使用密码保护的节点证书,请将密码添加到您的Elasticsearch密钥存储库:

            PKCS#12 格式

            如果签名证书是PKCS#12格式的,请使用以下命令:
              bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
              bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

              PEM 格式

              如果证书是PEM格式的,请使用以下命令:
                bin/elasticsearch-keystore add xpack.security.transport.ssl.secure_key_passphrase

                4、重启Elasticsearch

                您必须执行完整的集群重启。被配置为使用TLS的节点不能与使用未加密网络的节点通信(反之亦然)。启用TLS之后,必须重新启动所有节点,以维护集群之间的通信。
                注意:
                • 所有与tls相关的节点设置都被认为是高度敏感的,因此不会通过node info API开,有关这些设置的更多信息,请参见安全性设置。
                • Elasticsearch监视所有配置为与ls相关的节点设置值的文件,如证书、密钥、密钥存储库或信任存储库。如果您更新这些文件中的任何一个(例如,当您的主机名更改或您的证书到期时),Elasticsearch将重新加载它们。以全局Elasticsearch resources .reload.interval.high设置确定的频率对文件进行轮询,该频率默认为5秒。

                三、加密HTTP客户端通信

                启用安全特性时,可以选择使用TLS来确保HTTP客户机和集群之间的通信被加密。
                注意:强烈建议在HTTP层启用TLS,但这不是必需的。如果您在Elasticsearch的HTTP层上启用了TLS,那么您可能需要在Elastic堆栈的其他部分和您使用的任何Elasticsearch客户端上更改配置。

                1、如果还没有这样做,请生成节点证书

                特别是,您需要以下命令生成的文件:
                  bin/elasticsearch-certutil http
                  这个命令生成一个zip文件,其中包含用于Elasticsearch和Kibana的证书和密钥。每个文件夹都包含一个说明如何使用这些文件的自述文件。

                  2、验证已将输出文件复制到自述文件中指定的适当位置

                  例如,复制 http.p12 文件从 elasticsearch 文件夹导入到每个节点上的 elasticsearch 配置目录中。
                  如果选择为每个节点生成一个证书,则复制相应的 http.p12 文件到每个节点。
                  如果您想使用 Kibana 访问这个集群,请复制 elasticsearch-ca.pem 文件从 kibana 文件夹导入到 kibana 配置目录中。

                  3、启用TLS并指定访问节点证书所需的信息

                  a. 更新每个节点上的 elasticsearch.yml 文件中证书的位置

                  PKCS#12 格式
                  如果证书是PKCS#12格式的:
                    xpack.security.http.ssl.enabled: true
                    xpack.security.http.ssl.keystore.path: "http.p12"
                    PEM 格式
                    如果您有PEM格式的证书:
                      xpack.security.http.ssl.enabled: true
                      xpack.security.http.ssl.key: home/es/config/node1_http.key ①
                      xpack.security.http.ssl.certificate: home/es/config/node1_http.crt ②
                      xpack.security.http.ssl.certificate_authorities: [ "/home/es/config/ca.crt" ] ③
                      ① 节点密钥文件的完整路径。这必须是 Elasticsearch 配置目录 中的一个位置。
                      ② 节点证书的完整路径。这必须是 Elasticsearch 配置目录 中的一个位置。
                      ③ 应该信任的CA证书的路径数组。这些路径必须是Elasticsearch配置目录中的一个位置。

                      b. 如果您使用密码保护密钥存储库或私钥,请将该密码添加到Elasticsearch中的安全设置中

                      PKCS#12 格式
                      如果证书是PKCS#12格式的:
                        bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
                        PEM 格式
                        如果证书是PEM格式的:
                          bin/elasticsearch-keystore add xpack.security.http.ssl.secure_key_passphrase

                          4、可选的:如果您想使用Kibana,请按照 elasticsearch-certutil http 命令提供的自述文件中的说明操作,或者参见在Kibana中加密通信。

                          5、重启Elasticsearch

                          四、加密Elasticsearch和Active Directory之间的通信

                          https://www.elastic.co/guide/en/elasticsearch/reference/7.7/configuring-tls.html#tls-active-directory

                          五、加密Elasticsearch和LDAP之间的通信

                          https://www.elastic.co/guide/en/elasticsearch/reference/7.7/configuring-tls.html#tls-ldap



                          官方文档(原文地址):https://www.elastic.co/guide/en/elasticsearch/reference/7.7/configuring-tls.html#configuring-tls


                          文章转载自kpxiaoxm,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                          评论