• Elasticsearch:如何在不更新证书的情况下为集群之间建立互信


    我们知道,建立集群之间的互信非常重要。这个是为我们进行 CCR 及 CCS 操作的基础。只有建立好了集群之间的互信,我们才可以创建集群之间的 remote connection。特别是针对含有 SSL 连接的集群,他们含有各自的证书,那么我们该如何建立集群之间的互信呢?在我之前的文章 “Elasticsearch:如何为 CCR 及 CCS 建立带有安全的集群之间的互信” 中,我详述了如何通过更新证书来建立集群之间的互信。更新证书在很多的情况下,可能并不是最好的途径。在今天的文章中,我将详述如何在不更新证书的情况下,为集群之间建立互信。

    在今天的展示中,我将使用如下的架构:

    如上所示,我们创建两个不同的集群。它们分别运行于两个不同的机器上。它们使用不同的 IP 地址。我将使用最新的 Elastic Stack 8.4.1 来进行展示。

    如何在不更新证书的情况下为集群之间建立互信

    针对非 keystore 及 truststore 的安装

    如果你的 Elasticsearch 的部署不是按照 keystore 及 truststore 来进行安装的,而是参照我之前的文章 “Security:如何安装 Elastic SIEM 和 EDR” 来进行安装的话,那么你可以直接把另外一个集群的证书添加到相应的 config/elasticsearch.yml 的配置中去即可:

    config/elasticsearch.yml

    1. xpack.security.transport.ssl.enabled: true
    2. xpack.security.transport.ssl.verification_mode: certificate
    3. xpack.security.transport.ssl.key: /etc/elasticsearch/certs/elasticsearch.key
    4. xpack.security.transport.ssl.certificate: /etc/elasticsearch/certs/elasticsearch.crt
    5. xpack.security.transport.ssl.certificate_authorities: [ "/etc/elasticsearch/certs/ca/ca.crt", "certificate_from_another_cluster.crt ]

    在这种情况下的配置就非常简单明了。我们就不赘述了。

    安装

    如果你还没有安装好自己的 Elasticsearch 及 Kibana,请参考我之前的文章:

    请注意选择 Elastic Stack 8.x 的安装指南。在默认的情况下,Elasticsearch 是带有 HTTPS 访问的配置。在启动 Elasticsearch 后,我们再次针对 config/elasticsearch.yml 做如下的修正:

    config/elasticsearch.yml - macOS

     config/elasticsearch.yml - ubuntu

     为了能够在 macOS 上能够访问运行于 Ubuntu 上的 Kibana,我们可以针对 config/kibana.yml 做如下的修改:

    config/kibana.yml - ubuntu

     从上面的配置中,我们可以看出来,Elasticsearch 的访问是配有 SSL 加密的。它们的证书存在于 Elasticsearch 的安装目录中:

    macOS

    1. $ pwd
    2. /Users/liuxg/elastic/elasticsearch-8.4.1
    3. $ ls config/certs/
    4. http.p12 http_ca.crt transport.p12

    Ubuntu OS

    1. liuxg@liuxgu:~/stack/elasticsearch-8.4.1$ pwd
    2. /home/liuxg/stack/elasticsearch-8.4.1
    3. liuxg@liuxgu:~/stack/elasticsearch-8.4.1$ ls config/certs/
    4. http.p12 http_ca.crt transport.p12

    为了获取在默认 Elasticsearch 安装中的证书,我们可以使用如下的命令,以 Ubuntu OS 为例:

    1. liuxg@liuxgu:~/stack/elasticsearch-8.4.1$ pwd
    2. /home/liuxg/stack/elasticsearch-8.4.1
    3. liuxg@liuxgu:~/stack/elasticsearch-8.4.1$ ./bin/elasticsearch-keystore list
    4. warning: ignoring JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64; using bundled JDK
    5. keystore.seed
    6. xpack.security.http.ssl.keystore.secure_password
    7. xpack.security.transport.ssl.keystore.secure_password
    8. xpack.security.transport.ssl.truststore.secure_password
    9. liuxg@liuxgu:~/stack/elasticsearch-8.4.1$ ./bin/elasticsearch-keystore show xpack.security.transport.ssl.truststore.secure_password
    10. warning: ignoring JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64; using bundled JDK
    11. HNN9RjckQmiTxqgUXCNkIA
    12. liuxg@liuxgu:~/stack/elasticsearch-8.4.1$ cd config/certs/
    13. liuxg@liuxgu:~/stack/elasticsearch-8.4.1/config/certs$ openssl pkcs12 -in transport.p12 -out ubuntu.crt -clcerts -nokeys
    14. Enter Import Password:
    15. liuxg@liuxgu:~/stack/elasticsearch-8.4.1/config/certs$ ls
    16. http.p12 http_ca.crt transport.p12 ubuntu.crt

    在上面,我们利用 transport.p12 创建了一个叫做 ubuntu.crt 的证书。 我们把这个证书拷贝到 macOS 的证书目录下:

    1. $ pwd
    2. /Users/liuxg/elastic/elasticsearch-8.4.1
    3. $ ls config/certs/
    4. http.p12 http_ca.crt transport.p12
    5. $ cd config/certs/
    6. $ scp liuxg@ubuntu:/home/liuxg/stack/elasticsearch-8.4.1/config/certs/ubuntu.crt .
    7. ubuntu.crt 100% 2048 1.5MB/s 00:00
    8. $ ls
    9. http.p12 http_ca.crt transport.p12 ubuntu.crt

    我接下来,按照同样的方法,在 macOS 下创建同样的证书 mac.crt 文件:

    1. $ pwd
    2. /Users/liuxg/elastic/elasticsearch-8.4.1
    3. $ ./bin/elasticsearch-keystore list
    4. keystore.seed
    5. xpack.security.http.ssl.keystore.secure_password
    6. xpack.security.transport.ssl.keystore.secure_password
    7. xpack.security.transport.ssl.truststore.secure_password
    8. $ ./bin/elasticsearch-keystore show xpack.security.transport.ssl.truststore.secure_password
    9. 8CzmafQ0R-qLsiJfCM60jA
    10. $ cd config/certs/
    11. $ openssl pkcs12 -in transport.p12 -out mac.crt -clcerts -nokeys
    12. Enter Import Password:
    13. $ ls
    14. http.p12 http_ca.crt mac.crt transport.p12

    我们把这个 mac.crt 的证书拷贝到 Ubuntu 下的 Elasticsearch 安装目录中:

    1. $ pwd
    2. /Users/liuxg/elastic/elasticsearch-8.4.1
    3. $ ./bin/elasticsearch-keystore list
    4. keystore.seed
    5. xpack.security.http.ssl.keystore.secure_password
    6. xpack.security.transport.ssl.keystore.secure_password
    7. xpack.security.transport.ssl.truststore.secure_password
    8. $ ./bin/elasticsearch-keystore show xpack.security.transport.ssl.truststore.secure_password
    9. 8CzmafQ0R-qLsiJfCM60jA
    10. $ cd config/certs/
    11. $ openssl pkcs12 -in transport.p12 -out mac.crt -clcerts -nokeys
    12. Enter Import Password:
    13. $ ls
    14. http.p12 http_ca.crt mac.crt transport.p12
    15. $ scp mac.crt liuxg@ubuntu:/home/liuxg/stack/elasticsearch-8.4.1/config/certs
    16. mac.crt 100% 2060 1.1MB/s 00:00

    我们可以在 Ubuntu OS 的相应目录中进行查看:

    1. liuxg@liuxgu:~/stack/elasticsearch-8.4.1/config/certs$ pwd
    2. /home/liuxg/stack/elasticsearch-8.4.1/config/certs
    3. liuxg@liuxgu:~/stack/elasticsearch-8.4.1/config/certs$ ls
    4. http.p12 http_ca.crt mac.crt transport.p12 ubuntu.crt

    我们可以使用如下的命令来获得 macOS 下 transport.p12 truststore 的密码信息:

    1. $ pwd
    2. /Users/liuxg/elastic/elasticsearch-8.4.1
    3. $ ./bin/elasticsearch-keystore list
    4. keystore.seed
    5. xpack.security.http.ssl.keystore.secure_password
    6. xpack.security.transport.ssl.keystore.secure_password
    7. xpack.security.transport.ssl.truststore.secure_password
    8. $ ./bin/elasticsearch-keystore show xpack.security.transport.ssl.truststore.secure_password
    9. 8CzmafQ0R-qLsiJfCM60jA

    我们可以使用如下的命令来查看当前 transport.p12 的证书信息:

    1. $ pwd
    2. /Users/liuxg/elastic/elasticsearch-8.4.1
    3. $ ./bin/elasticsearch-keystore list
    4. keystore.seed
    5. xpack.security.http.ssl.keystore.secure_password
    6. xpack.security.transport.ssl.keystore.secure_password
    7. xpack.security.transport.ssl.truststore.secure_password
    8. $ ./bin/elasticsearch-keystore show xpack.security.transport.ssl.truststore.secure_password
    9. 8CzmafQ0R-qLsiJfCM60jA
    10. $ cd config/certs/
    11. $ ls
    12. http.p12 http_ca.crt mac.crt transport.p12 ubuntu.crt
    13. $ keytool -keystore transport.p12 -list
    14. Enter keystore password:
    15. Keystore type: PKCS12
    16. Keystore provider: SUN
    17. Your keystore contains 2 entries
    18. transport, Sep 13, 2022, PrivateKeyEntry,
    19. Certificate fingerprint (SHA-256): 62:CF:21:3C:3A:75:24:53:2B:78:11:9D:AF:D0:EE:1E:26:01:93:71:5E:40:36:8B:3F:7A:7E:E9:01:B5:28:98
    20. transport_ca, Sep 13, 2022, trustedCertEntry,
    21. Certificate fingerprint (SHA-256): 12:C7:9E:75:28:3B:65:36:10:FA:62:F9:5B:22:B4:D3:AC:18:0D:9B:5F:8D:E9:AE:0F:42:46:2D:D0:68:75:CA

     从上面,我们可以看出来,它里面有两个证书。现在我们使用如下的方法把 ubuntu.crt 这个证书添加到 transport.p12 这个 truststore 里去。

    1. $ pwd
    2. /Users/liuxg/elastic/elasticsearch-8.4.1/config/certs
    3. $ keytool -importcert -trustcacerts -noprompt -keystore transport.p12 -storepass 8CzmafQ0R-qLsiJfCM60jA -alias ubuntu -file ubuntu.crt
    4. Certificate was added to keystore
    5. $ keytool -keystore transport.p12 -list
    6. Enter keystore password:
    7. Keystore type: PKCS12
    8. Keystore provider: SUN
    9. Your keystore contains 3 entries
    10. transport, Sep 13, 2022, PrivateKeyEntry,
    11. Certificate fingerprint (SHA-256): 62:CF:21:3C:3A:75:24:53:2B:78:11:9D:AF:D0:EE:1E:26:01:93:71:5E:40:36:8B:3F:7A:7E:E9:01:B5:28:98
    12. transport_ca, Sep 13, 2022, trustedCertEntry,
    13. Certificate fingerprint (SHA-256): 12:C7:9E:75:28:3B:65:36:10:FA:62:F9:5B:22:B4:D3:AC:18:0D:9B:5F:8D:E9:AE:0F:42:46:2D:D0:68:75:CA
    14. ubuntu, Sep 13, 2022, trustedCertEntry,
    15. Certificate fingerprint (SHA-256): CC:73:BC:61:52:17:42:6C:3D:4F:BF:7F:F1:2B:27:17:62:EA:FA:02:E6:46:27:5B:18:50:FF:CF:79:42:46:A6

     在上面的命令中, 8CzmafQ0R-qLsiJfCM60jA  是我们当前 macOS 的 transport.p12 这个 truststore 的密码。从上面的返回结果中,我们可以看出来 ubuntu 的证书已经成功地被添加进到 transport.p12 这个 truststore 里去了。

    按照同样的方法,我们可以把 mac.crt 这个证书添加到 Ubuntu 机器上的 Elasticsearch 中的 transport.p12 truststore 里去。

    1. liuxg@liuxgu:~/stack/elasticsearch-8.4.1$ pwd
    2. /home/liuxg/stack/elasticsearch-8.4.1
    3. liuxg@liuxgu:~/stack/elasticsearch-8.4.1$ ./bin/elasticsearch-keystore list
    4. warning: ignoring JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64; using bundled JDK
    5. keystore.seed
    6. xpack.security.http.ssl.keystore.secure_password
    7. xpack.security.transport.ssl.keystore.secure_password
    8. xpack.security.transport.ssl.truststore.secure_password
    9. liuxg@liuxgu:~/stack/elasticsearch-8.4.1$ ./bin/elasticsearch-keystore show xpack.security.transport.ssl.truststore.secure_password
    10. warning: ignoring JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64; using bundled JDK
    11. HNN9RjckQmiTxqgUXCNkIA
    12. liuxg@liuxgu:~/stack/elasticsearch-8.4.1$ cd config/certs/
    13. liuxg@liuxgu:~/stack/elasticsearch-8.4.1/config/certs$ ls
    14. http.p12 http_ca.crt mac.crt transport.p12 ubuntu.crt
    15. liuxg@liuxgu:~/stack/elasticsearch-8.4.1/config/certs$ keytool -importcert -trustcacerts -noprompt -keystore transport.p12 -storepass HNN9RjckQmiTxqgUXCNkIA -alias mac -file mac.crt
    16. Certificate was added to keystore
    17. liuxg@liuxgu:~/stack/elasticsearch-8.4.1/config/certs$ keytool -keystore transport.p12 -list
    18. Enter keystore password:
    19. Keystore type: PKCS12
    20. Keystore provider: SUN
    21. Your keystore contains 3 entries
    22. mac, Sep 13, 2022, trustedCertEntry,
    23. Certificate fingerprint (SHA-256): 62:CF:21:3C:3A:75:24:53:2B:78:11:9D:AF:D0:EE:1E:26:01:93:71:5E:40:36:8B:3F:7A:7E:E9:01:B5:28:98
    24. transport, Sep 13, 2022, PrivateKeyEntry,
    25. Certificate fingerprint (SHA-256): CC:73:BC:61:52:17:42:6C:3D:4F:BF:7F:F1:2B:27:17:62:EA:FA:02:E6:46:27:5B:18:50:FF:CF:79:42:46:A6
    26. transport_ca, Sep 13, 2022, trustedCertEntry,
    27. Certificate fingerprint (SHA-256): 88:75:60:B4:75:0E:72:58:00:0F:A9:FB:40:12:AB:BD:0D:7F:C7:18:E7:D4:0F:41:E5:38:10:D1:45:8F:4C:1A

    从上面的输出中,我们已经成功地把 mac.crt 这个证书添加到 Ubuntu 下的 Elasticsearch 安装文件 transport.p12 这个 truststore 中去了。

    提示:如果我们想删除已经添加的证书,我们可以使用如下的命令:

    keytool -delete -noprompt -alias mac -keystore transport.p12 -storepass HNN9RjckQmiTxqgUXCNkIA

    我们重新启动 macOS  及 Ubuntu 上的两个 Elasticsearch 集群。我们接着在 macOS 安装的 Kibana 中进行如下的操作:

    上面显示我们的连接是成功的。当然,我们也可以在 Ubuntu 机器安装的 Elasticsearch 来连接 macOS 上的安装,它也应该是成功的:

    测试 CCS 

    一旦我们的 remote cluster 的连接是成功的,我们就可以放心地使用 CCS。如果你对 CCS 还不是很熟的话,请参考我之前的文章 ‘Elasticsearch:跨集群搜索 Cross-cluster search (CCS)”。我们在 Ubuntu OS 里的 Kibana 中打入如下的命令:

    1. PUT twitter/_doc/1
    2. {
    3. "content": "This is Xiaoguo, Liu from Elastic"
    4. }

    上述命令将生成一个叫做 twitter 的索引,尽管它仅有一个文档。

    我们接下来在 macOS 里的 Kibana 中打入如下的命令来对 Ubuntu OS 中的 twitter 索引进行搜索:

    GET ubuntu:twitter/_search

    很显然,它能够针对在另外一个集群中的索引 twitter 进行搜索。 

    参考:

    【1】Generating a KeyStore and TrustStore (Configuring Java CAPS for SSL Support)

    【2】MicroStrategy Community

  • 相关阅读:
    猿创征文|《Java》【速学】对象this关键字
    企业架构LNMP学习笔记52
    FITC-PEG-MAL,荧光素聚乙二醇马来酰亚胺,FITC-PEG-Maleimidev
    Windows系统下使用tar命令,压缩文件与解压缩文件并指定路径
    AbstractBeanDefinition解读
    41.cuBLAS开发指南中文版--cuBLAS中的Level-2gemvBatched()
    Educational Codeforces Round 162(div2)||ABC
    springboot+html实现密码重置功能
    【第05天】给定一个整数 n 判断是否为素数 | 质数的判定与筛选
    明明肚子就是不饿,就是总想着吃点东西,这是为什么?原因有3个
  • 原文地址:https://blog.csdn.net/UbuntuTouch/article/details/126826063