配置 SSL-TLS
此页面不适用于 ClickHouse Cloud。此处记录的步骤在 ClickHouse Cloud 服务中是自动化的。
本指南提供了简单且最小的设置,以配置 ClickHouse 使用 OpenSSL 证书来验证连接。在本演示中,创建了自签名的证书授权 (CA) 证书和密钥,并使用节点证书进行连接,并设置了适当的配置。
TLS 实现是复杂的,必须考虑许多选项以确保完全安全和稳健的部署。这是一个基本教程,包含基本的 SSL/TLS 配置示例。请咨询您的 PKI/安全团队,以生成适合您组织的正确证书。
查看这个 关于证书使用的基础教程,以获取入门概述。
1. 创建 ClickHouse 部署
本指南是在 Ubuntu 20.04 下编写的,ClickHouse 安装在使用 DEB 包(使用 apt)的以下主机上。域名为 marsnet.local
:
主机 | IP 地址 |
---|---|
chnode1 | 192.168.1.221 |
chnode2 | 192.168.1.222 |
chnode3 | 192.168.1.223 |
查看 快速入门 以获取有关如何安装 ClickHouse 的更多详细信息。
2. 创建 SSL 证书
使用自签名证书仅供演示,并不应在生产中使用。证书请求应由组织创建并使用将配置在设置中的 CA 链进行验证。然而,这些步骤可以用于配置和测试设置,然后可以用实际将使用的证书替换。
-
生成将用于新 CA 的密钥:
-
生成新的自签名 CA 证书。以下命令将创建一个新的证书,该证书将用于使用 CA 密钥签署其他证书:
备注在集群外的安全位置备份密钥和 CA 证书。在生成节点证书之后,应从集群节点中删除密钥。
-
验证新 CA 证书的内容:
-
为每个节点创建证书请求 (CSR) 并生成密钥:
-
使用 CSR 和 CA 创建新的证书和密钥对:
-
验证证书的主题和颁发者:
-
检查新证书是否经过 CA 证书验证:
3. 创建和配置一个目录以存储证书和密钥。
这必须在每个节点上完成。在每个主机上使用适当的证书和密钥。
-
在每个节点上创建一个 ClickHouse 可以访问的目录中的文件夹。我们建议使用默认配置目录(例如
/etc/clickhouse-server
): -
将 CA 证书、节点证书和相应节点的密钥复制到新的证书目录中。
-
更新所有者和权限,以允许 ClickHouse 读取证书:
4. 使用 ClickHouse Keeper 配置基本集群的环境
在该部署环境中,每个节点使用以下 ClickHouse Keeper 设置。每个服务器将具有自己的 <server_id>
。(例如,<server_id>1</server_id>
用于节点 chnode1
,依此类推。)
建议的端口是 9281
用于 ClickHouse Keeper。然而,如果该端口已经被环境中的其他应用程序使用,则可以配置该端口。
有关所有选项的完整说明,请访问 https://clickhouse.com/docs/operations/clickhouse-keeper/
-
在 ClickHouse 服务器的
config.xml
的<clickhouse>
标签内添加以下内容:备注对于生产环境,建议在
config.d
目录中使用单独的.xml
配置文件。 欲了解更多信息,访问 https://clickhouse.com/docs/operations/configuration-files/ -
在所有节点上取消注释并更新 Keeper 设置,并将
<secure>
标志设置为 1: -
更新并添加以下集群设置到
chnode1
和chnode2
。chnode3
将用于 ClickHouse Keeper 多数。备注对于此配置,仅配置了一个示例集群。测试样本集群必须被删除、注释掉,或者如果存在正在测试的现有集群,则必须更新端口并添加
<secure>
选项。如果在安装或users.xml
文件中最初配置了default
用户以具有密码,则必须设置<user>
和<password>
。以下内容在两个服务器上创建一个带有一个分片副本的集群(每个节点一个)。
-
定义宏值,以能够创建一个用于测试的 ReplicatedMergeTree 表。在
chnode1
上:在
chnode2
上:
5. 在 ClickHouse 节点上配置 SSL-TLS 接口
以下设置在 ClickHouse 服务器的 config.xml
中配置
-
设置部署的显示名称(可选):
-
设置 ClickHouse 监听外部端口:
-
在每个节点上配置
https
端口并禁用http
端口: -
在每个节点上配置 ClickHouse 原生安全 TCP 端口并禁用默认不安全端口:
-
在每个节点上配置
interserver https
端口并禁用默认不安全端口: -
使用证书和路径配置 OpenSSL
备注每个文件名和路径必须更新以匹配正在配置的节点。 例如,更新
<certificateFile>
项为chnode2.crt
当在chnode2
主机上配置时。 -
为每个节点配置 gRPC 的 SSL:
有关更多信息,请访问 https://clickhouse.com/docs/interfaces/grpc/
-
在至少一个节点上配置 ClickHouse 客户端以使用 SSL 进行连接,在其自己的
config.xml
文件中(默认在/etc/clickhouse-client/
): -
禁用 MySQL 和 PostgreSQL 的默认仿真端口:
6. 测试
-
启动所有节点,一次一个:
-
验证安全端口是否已启动并在监听,应该在每个节点上看起来类似于此示例:
ClickHouse 端口 描述 8443 https 接口 9010 interserver https 端口 9281 ClickHouse Keeper 安全端口 9440 安全原生 TCP 协议 9444 ClickHouse Keeper Raft 端口 -
验证 ClickHouse Keeper 健康状态 典型的 四字命令 (4lW) 命令在没有 TLS 的情况下使用
echo
将无法工作,以下是如何使用openssl
来使用这些命令。- 使用
openssl
启动交互式会话
- 使用
- 在 openssl 会话中发送 4LW 命令
-
使用
--secure
标志和 SSL 端口启动 ClickHouse 客户端: -
使用
https
接口登录 Play UI,地址为https://chnode1.marsnet.local:8443/play
。备注浏览器将显示一个不受信任的证书,因为它是从工作站访问的,并且证书不在客户端机器的根 CA 存储中。 当使用由公共机构或企业 CA 颁发的证书时,应该显示为受信任的。
-
创建一个副本表:
-
在
chnode1
上插入几行: -
通过在
chnode2
上查看行来验证复制:
总结
本文重点介绍了如何配置具有 SSL/TLS 的 ClickHouse 环境。对于生产环境的不同要求,设置可能会有所不同;例如,证书验证级别、协议、密码等。但是您现在应该对配置和实施安全连接的步骤有一个清晰的理解。