配置用于身份验证的 SSL 用户证书
This page is not applicable to ClickHouse Cloud. The feature documented here is not available in ClickHouse Cloud services. See the ClickHouse Cloud Compatibility guide for more information.
本指南提供了通过 SSL 用户证书配置认证所需的简单且最小化的配置。该教程建立在配置 SSL-TLS 用户指南的基础之上。
在使用 https、native、mysql 和 postgresql 接口时支持 SSL 用户认证。
为实现安全认证,ClickHouse 节点需要将 <verificationMode>strict</verificationMode> 进行严格模式配置(尽管 relaxed 可用于测试目的)。
如果你在 MySQL 接口前使用 AWS NLB,则必须联系 AWS 支持启用以下未公开的选项:
我希望能够将我们的 NLB proxy protocol v2 配置为如下所示:
proxy_protocol_v2.client_to_server.header_placement,Value=on_first_ack。 :::
1. 创建 SSL 用户证书
本示例使用由自签名 CA 签发的自签名证书。对于生产环境,请创建 CSR 并提交给 PKI 团队或证书提供商以获取正式证书。
-
生成证书签名请求(CSR)和密钥。基本格式如下:
在此示例中,我们将在本示例环境中为要使用的域和用户生成 CSR:
注意CN 值是任意的,任何字符串都可以用作证书标识符。后续步骤在创建用户时会用到该值。
-
生成并签署将用于身份验证的新用户证书。基本格式如下:
在此示例中,我们将在本示例环境中为要使用的域和用户生成证书:
2. 创建 SQL 用户并授予权限
有关如何启用 SQL 用户和设置角色的详细信息,请参阅用户指南:Defining SQL Users and Roles。
-
创建一个基于证书认证的 SQL 用户:
-
为新的证书用户授予权限:
注意在本练习中,为演示目的向该用户授予了完全的管理员权限。有关权限设置,请参阅 ClickHouse RBAC 文档。
注意建议使用 SQL 定义用户和角色。不过,如果当前是通过配置文件定义用户和角色,则用户配置类似于:
3. 测试
-
将用户证书、用户密钥和 CA 证书复制到某个远程节点。
-
在 ClickHouse 的 客户端配置 中使用证书及其路径配置 OpenSSL。
-
运行
clickhouse-client。注意请注意,当在配置中指定了证书时,传递给 clickhouse-client 的密码会被忽略。
4. 测试 HTTP
-
将用户证书、用户私钥和 CA 证书复制到一个远程节点上。
-
使用
curl测试一条示例 SQL 命令。基本格式如下:例如:
输出类似如下:
注意请注意,这里没有指定密码。证书用来替代密码,这是 ClickHouse 对用户进行身份验证的方式。
摘要
本文介绍了为 SSL 证书认证创建和配置用户的基本方法。此方法可用于 clickhouse-client,或任何支持 HTTPS 接口且可以设置 HTTP 头部的客户端。由于生成的证书和密钥用于对用户在 ClickHouse 数据库上的操作进行认证和授权,因此必须妥善保管,并严格限制访问权限。请像对待密码一样对待该证书和密钥。