本指南介绍如何以最少的配置,使用 SSL 用户证书来设置身份验证。本教程基于 配置 TLS 指南。
创建 SSL 用户证书
- 生成证书签名请求 (CSR) 和密钥。基本格式如下:
在此示例中,对于此示例环境中使用的域名和用户,可使用以下命令:openssl req -newkey rsa:2048 -nodes -subj "/CN=<my_host>:<my_user>" -keyout <my_cert_name>.key -out <my_cert_name>.csropenssl req -newkey rsa:2048 -nodes -subj "/CN=chnode1.marsnet.local:cert_user" -keyout chnode1_cert_user.key -out chnode1_cert_user.csr
- 生成并签署将用于身份验证的新用户证书。基本格式如下:
在此示例中,对于此示例环境中使用的域名和用户,可使用以下命令:openssl x509 -req -in <my_cert_name>.csr -out <my_cert_name>.crt -CA <my_ca_cert>.crt -CAkey <my_ca_cert>.key -days 365openssl x509 -req -in chnode1_cert_user.csr -out chnode1_cert_user.crt -CA marsnet_ca.crt -CAkey marsnet_ca.key -days 365
创建 SQL 用户并授予权限
-
创建一个使用证书身份验证的 SQL 用户:
CREATE USER cert_user IDENTIFIED WITH ssl_certificate CN 'chnode1.marsnet.local:cert_user'; -
向新的证书用户授予特权:
GRANT ALL ON *.* TO cert_user WITH GRANT OPTION;
测试
-
将用户证书、用户密钥和 CA 证书复制到远程节点。
-
在 ClickHouse 客户端配置中配置 OpenSSL,并指定证书和路径。
<openSSL> <client> <certificateFile>my_cert_name.crt</certificateFile> <privateKeyFile>my_cert_name.key</privateKeyFile> <caConfig>my_ca_cert.crt</caConfig> </client> </openSSL> -
运行
clickhouse-client。clickhouse-client --user <my_user> --query 'SHOW TABLES'
HTTP 测试
-
将用户证书、用户密钥和 CA 证书复制到远程节点。
-
使用
curl测试一条示例 SQL 命令。基本格式如下:echo 'SHOW TABLES' | curl 'https://<clickhouse_node>:8443' --cert <my_cert_name>.crt --key <my_cert_name>.key --cacert <my_ca_cert>.crt -H "X-ClickHouse-SSL-Certificate-Auth: on" -H "X-ClickHouse-User: <my_user>" --data-binary @-例如:
echo 'SHOW TABLES' | curl 'https://chnode1:8443' --cert chnode1_cert_user.crt --key chnode1_cert_user.key --cacert marsnet_ca.crt -H "X-ClickHouse-SSL-Certificate-Auth: on" -H "X-ClickHouse-User: cert_user" --data-binary @-输出将类似于以下内容:
INFORMATION_SCHEMA default information_schema system
摘要
本文介绍了为 SSL 证书身份验证创建和配置用户的基本方法。此方法可用于 clickhouse-client,也适用于任何支持 https 接口且可设置 HTTP 请求头的客户端。生成的证书和私钥应妥善保管并严格限制访问,因为证书用于对用户进行身份验证和授权,以执行 ClickHouse 数据库上的操作。请像保护密码一样保护证书和私钥。