可选的 ClickHouse 与 Zookeeper 之间的安全通信
Not supported in ClickHouse Cloud
你需要在通过 SSL 与 ClickHouse 客户端通信时指定 ssl.keyStore.location、ssl.keyStore.password 以及 ssl.trustStore.location、ssl.trustStore.password。这些选项从 Zookeeper 3.5.2 版本开始可用。
你可以将 zookeeper.crt 添加到受信任证书列表中。
sudo cp zookeeper.crt /usr/local/share/ca-certificates/zookeeper.crt
sudo update-ca-certificates
config.xml 中的 client 配置段如下所示:`
<client>
<certificateFile>/etc/clickhouse-server/client.crt</certificateFile>
<privateKeyFile>/etc/clickhouse-server/client.key</privateKeyFile>
<loadDefaultCAFile>true</loadDefaultCAFile>
<cacheSessions>true</cacheSessions>
<disableProtocols>sslv2,sslv3</disableProtocols>
<preferServerCiphers>true</preferServerCiphers>
<invalidCertificateHandler>
<name>RejectCertificateHandler</name>
</invalidCertificateHandler>
</client>
在 ClickHouse 配置中添加 Zookeeper,并配置相应的集群和宏:
<clickhouse>
<zookeeper>
<node>
<host>localhost</host>
<port>2281</port>
<secure>1</secure>
</node>
</zookeeper>
</clickhouse>
启动 clickhouse-server。在日志中应看到:
<Trace> ZooKeeper: 已初始化,主机:secure://localhost:2281
前缀 secure:// 表示连接已通过 SSL 加密保护。
要验证流量已加密,可在该安全端口上运行 tcpdump:
tcpdump -i any dst port 2281 -nnXS
然后在 clickhouse-client 中执行查询:
SELECT * FROM system.zookeeper WHERE path = '/';
在未加密的连接中,可以在 tcpdump 的输出中看到类似如下的内容:
在加密连接下,你不应该看到此内容。