配置 SSL-TLS
本页面不适用于 ClickHouse Cloud。此处记录的过程在 ClickHouse Cloud 服务中是自动化的。
本指南提供了简单且最小的设置以配置 ClickHouse 使用 OpenSSL 证书来验证连接。为了演示,创建了自签名的证书颁发机构 (CA) 证书和密钥,并使用节点证书以适当的设置进行连接。
TLS 实现是复杂的,有许多选项需要考虑,以确保完全安全和稳健的部署。这是一个基础教程,包含基本的 SSL/TLS 配置示例。请咨询你的 PKI/安全团队,以为你的组织生成正确的证书。
请查看此 关于证书使用的基础教程 以获得简介概述。
1. 创建 ClickHouse 部署
本指南是基于在以下主机上使用 DEB 包(通过 apt)安装的 Ubuntu 20.04 和 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>
。 (例如,chnode1
的 <server_id>1</server_id>
,依此类推。)
推荐的端口是 ClickHouse Keeper 的 9281
。然而,该端口是可以配置的,如果该端口已被环境中的其他应用程序使用,则可以设置其他端口。
有关所有选项的完整说明,请访问 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 Native 安全 TCP 端口,并禁用默认的不安全端口:
- 在每个节点上配置
interserver https
端口,并禁用默认的不安全端口:
-
使用证书和路径配置 OpenSSL
备注每个文件名和路径必须更新为与正在配置的节点匹配。 例如,在配置
chnode2
主机时,更新<certificateFile>
条目为chnode2.crt
。
- 为每个节点配置 gRPC 以使用 SSL:
有关更多信息,请访问 https://clickhouse.com/docs/interfaces/grpc/
- 在至少一个节点上配置 ClickHouse 客户端,以便在其自己的
config.xml
文件中使用 SSL 进行连接(默认在/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
上的行来验证复制:
总结
本文重点介绍了如何配置带有 SSL/TLS 的 ClickHouse 环境。在生产环境中,设置将因不同的需求而有所不同;例如,证书验证级别、协议、密码等。 但你现在应该对配置和实施安全连接所涉及的步骤有了良好的理解。