跳到主要内容
跳到主要内容

配置 SSL-TLS

Not supported in ClickHouse Cloud
备注

此页面不适用于 ClickHouse Cloud。此处记录的步骤在 ClickHouse Cloud 服务中是自动化的。

本指南提供了简单且最小的设置,以配置 ClickHouse 使用 OpenSSL 证书来验证连接。在本演示中,创建了自签名的证书授权 (CA) 证书和密钥,并使用节点证书进行连接,并设置了适当的配置。

备注

TLS 实现是复杂的,必须考虑许多选项以确保完全安全和稳健的部署。这是一个基本教程,包含基本的 SSL/TLS 配置示例。请咨询您的 PKI/安全团队,以生成适合您组织的正确证书。

查看这个 关于证书使用的基础教程,以获取入门概述。

1. 创建 ClickHouse 部署

本指南是在 Ubuntu 20.04 下编写的,ClickHouse 安装在使用 DEB 包(使用 apt)的以下主机上。域名为 marsnet.local

主机IP 地址
chnode1192.168.1.221
chnode2192.168.1.222
chnode3192.168.1.223
备注

查看 快速入门 以获取有关如何安装 ClickHouse 的更多详细信息。

2. 创建 SSL 证书

备注

使用自签名证书仅供演示,并不应在生产中使用。证书请求应由组织创建并使用将配置在设置中的 CA 链进行验证。然而,这些步骤可以用于配置和测试设置,然后可以用实际将使用的证书替换。

  1. 生成将用于新 CA 的密钥:

  2. 生成新的自签名 CA 证书。以下命令将创建一个新的证书,该证书将用于使用 CA 密钥签署其他证书:

    备注

    在集群外的安全位置备份密钥和 CA 证书。在生成节点证书之后,应从集群节点中删除密钥。

  3. 验证新 CA 证书的内容:

  4. 为每个节点创建证书请求 (CSR) 并生成密钥:

  5. 使用 CSR 和 CA 创建新的证书和密钥对:

  6. 验证证书的主题和颁发者:

  7. 检查新证书是否经过 CA 证书验证:

3. 创建和配置一个目录以存储证书和密钥。

备注

这必须在每个节点上完成。在每个主机上使用适当的证书和密钥。

  1. 在每个节点上创建一个 ClickHouse 可以访问的目录中的文件夹。我们建议使用默认配置目录(例如 /etc/clickhouse-server):

  2. 将 CA 证书、节点证书和相应节点的密钥复制到新的证书目录中。

  3. 更新所有者和权限,以允许 ClickHouse 读取证书:

4. 使用 ClickHouse Keeper 配置基本集群的环境

在该部署环境中,每个节点使用以下 ClickHouse Keeper 设置。每个服务器将具有自己的 <server_id>。(例如,<server_id>1</server_id> 用于节点 chnode1,依此类推。)

备注

建议的端口是 9281 用于 ClickHouse Keeper。然而,如果该端口已经被环境中的其他应用程序使用,则可以配置该端口。

有关所有选项的完整说明,请访问 https://clickhouse.com/docs/operations/clickhouse-keeper/

  1. 在 ClickHouse 服务器的 config.xml<clickhouse> 标签内添加以下内容:

    备注

    对于生产环境,建议在 config.d 目录中使用单独的 .xml 配置文件。 欲了解更多信息,访问 https://clickhouse.com/docs/operations/configuration-files/

  2. 在所有节点上取消注释并更新 Keeper 设置,并将 <secure> 标志设置为 1:

  3. 更新并添加以下集群设置到 chnode1chnode2chnode3 将用于 ClickHouse Keeper 多数。

    备注

    对于此配置,仅配置了一个示例集群。测试样本集群必须被删除、注释掉,或者如果存在正在测试的现有集群,则必须更新端口并添加 <secure> 选项。如果在安装或 users.xml 文件中最初配置了 default 用户以具有密码,则必须设置 <user><password>

    以下内容在两个服务器上创建一个带有一个分片副本的集群(每个节点一个)。

  4. 定义宏值,以能够创建一个用于测试的 ReplicatedMergeTree 表。在 chnode1 上:

    chnode2 上:

5. 在 ClickHouse 节点上配置 SSL-TLS 接口

以下设置在 ClickHouse 服务器的 config.xml 中配置

  1. 设置部署的显示名称(可选):

  2. 设置 ClickHouse 监听外部端口:

  3. 在每个节点上配置 https 端口并禁用 http 端口:

  4. 在每个节点上配置 ClickHouse 原生安全 TCP 端口并禁用默认不安全端口:

  5. 在每个节点上配置 interserver https 端口并禁用默认不安全端口:

  6. 使用证书和路径配置 OpenSSL

    备注

    每个文件名和路径必须更新以匹配正在配置的节点。 例如,更新 <certificateFile> 项为 chnode2.crt 当在 chnode2 主机上配置时。

    有关更多信息,请访问 https://clickhouse.com/docs/operations/server-configuration-parameters/settings/#server_configuration_parameters-openssl

  7. 为每个节点配置 gRPC 的 SSL:

    有关更多信息,请访问 https://clickhouse.com/docs/interfaces/grpc/

  8. 在至少一个节点上配置 ClickHouse 客户端以使用 SSL 进行连接,在其自己的 config.xml 文件中(默认在 /etc/clickhouse-client/):

  9. 禁用 MySQL 和 PostgreSQL 的默认仿真端口:

6. 测试

  1. 启动所有节点,一次一个:

  2. 验证安全端口是否已启动并在监听,应该在每个节点上看起来类似于此示例:

    ClickHouse 端口描述
    8443https 接口
    9010interserver https 端口
    9281ClickHouse Keeper 安全端口
    9440安全原生 TCP 协议
    9444ClickHouse Keeper Raft 端口
  3. 验证 ClickHouse Keeper 健康状态 典型的 四字命令 (4lW) 命令在没有 TLS 的情况下使用 echo 将无法工作,以下是如何使用 openssl 来使用这些命令。

    • 使用 openssl 启动交互式会话
  • 在 openssl 会话中发送 4LW 命令
  1. 使用 --secure 标志和 SSL 端口启动 ClickHouse 客户端:

  2. 使用 https 接口登录 Play UI,地址为 https://chnode1.marsnet.local:8443/play

    配置 SSL
    备注

    浏览器将显示一个不受信任的证书,因为它是从工作站访问的,并且证书不在客户端机器的根 CA 存储中。 当使用由公共机构或企业 CA 颁发的证书时,应该显示为受信任的。

  3. 创建一个副本表:

  4. chnode1 上插入几行:

  5. 通过在 chnode2 上查看行来验证复制:

总结

本文重点介绍了如何配置具有 SSL/TLS 的 ClickHouse 环境。对于生产环境的不同要求,设置可能会有所不同;例如,证书验证级别、协议、密码等。但是您现在应该对配置和实施安全连接的步骤有一个清晰的理解。