配置 SSL-TLS
此页面不适用于 ClickHouse Cloud。此处文档记录的流程在 ClickHouse Cloud 服务中是自动化的。
本指南提供简单 minimal 的设置,以配置 ClickHouse 使用 OpenSSL 证书来验证连接。为了本演示,创建了自签名的证书颁发机构 (CA) 证书和密钥,以及节点证书,以便进行适当设置的连接。
TLS 实现非常复杂,有很多选项需要考虑,以确保完全安全和稳健的部署。这是一个基础教程,包含基本的 SSL/TLS 配置示例。请与您的 PKI/安全团队协作,生成适合您组织的正确证书。
查看这个 关于证书使用的基础教程 获取入门概述。
1. 创建 ClickHouse 部署
本指南是基于 Ubuntu 20.04 和在以下主机上使用 DEB 包(通过 apt)安装的 ClickHouse 编写的。域名为 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 与证书和路径
备注每个文件名和路径必须更新为与正在配置的节点匹配。 例如,在配置
chnode2
主机时,更新<certificateFile>
项为chnode2.crt
。
- 为每个节点配置 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 | 安全 Native TCP 协议 |
9444 | ClickHouse Keeper Raft 端口 |
- 验证 ClickHouse Keeper 的健康状态
典型的 4 字母词 (4lW) 命令在没有 TLS 的情况下使用
echo
将无法工作,这里是如何在openssl
会话中使用这些命令。- 使用
openssl
启动交互式会话
- 使用
- 在 openssl 会话中发送 4LW 命令
- 使用
--secure
标志和 SSL 端口启动 ClickHouse 客户端:
-
使用
https
接口登录到 Play UI,地址为https://chnode1.marsnet.local:8443/play
。备注由于它是从工作站访问的,因此浏览器将显示一个不受信任的证书,并且证书不在客户端机器的根 CA 存储中。 使用公共机构或企业 CA 发布的证书时,应该显示为受信任。
-
创建一个复制表:
- 在
chnode1
上添加几行:
- 通过在
chnode2
上查看行来验证复制:
总结
本文重点介绍了如何配置 ClickHouse 环境以使用 SSL/TLS。生产环境中的设置将根据不同的要求而有所不同;例如,证书验证级别、协议、密码等。但您现在应该对配置和实施安全连接所涉及的步骤有了清晰的理解。