Clickhouse配置SSL双向认证
【摘要】 clickhouse如何配置证书双向认证,快来看看吧
Clickhouse配置证书双向认证
简介
某些场景下,clickhouse需要配置SSL,以增强连接的安全性,下面以自签名证书为例,演示如何配置SSL,具体操作步骤如下:
1.安装openssl
yum install openssl #Centos
sudo apt install openssl #Ubuntu
2.生成根证书
首先生成一个配置文件:
cat >req.conf <<EOF
[ req ]
distinguished_name = req_distinguished_name
x509_extensions = v3_ca
prompt = no
[ req_distinguished_name ]
C = CN
ST = GD
O = Bytebase
CN = root
[ v3_ca ]
basicConstraints = critical,CA:TRUE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
[ v3_req ]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[ alt_names ]
IP.1 = YOUR_SERVER_IP
EOF
生成根CA私钥
openssl genrsa -out ca.key 2048
生成CA证书
openssl req -x509 -new -key ca.key -sha256 -days 36500 -out ca.pem -extensions 'v3_ca' -config req.conf
3.签发服务端证书
生成服务端私钥
openssl genrsa -out server.key 2048
使用ca私钥和ca证书签发服务端证书
openssl req -new -sha256 -key server.key -out server.csr -subj "/C=CN/ST=GD/O=Bytebase/CN=YOUR_DOMAIN_NAME"
openssl x509 -req -days 36500 -sha256 -extensions v3_req -CA ca.pem -CAkey ca.key -CAcreateserial -in server.csr -out server.pem
使用自己的域名替换YOUR_DOMAIN_NAME
,也可以使用IP,客户端连接时会校验
4.签发客户端证书
生成客户端私钥
openssl genrsa -out client.key 2048
签发服务端证书
openssl req -new -sha256 -key client.key -out client.csr -subj "/C=CN/ST=GD/O=Bytebase/CN=YOUR_DOMAIN_NAME"
openssl x509 -req -days 36500 -sha256 -extensions v3_req -CA ca.pem -CAkey ca.key -CAcreateserial -in client.csr -out client.pem
5.clickhouse服务端ssl配置
在clickhouse进程的config.xml中添加如下配置,并放通https_port和tcp_port_secure
<openSSL>
<server>
<certificateFile>/xxxx/server.pem</certificateFile>
<privateKeyFile>/xxxx/server.key</privateKeyFile>
<caConfig>/xxxx/ca.pem</caConfig>
<verificationMode>strict</verificationMode>
</server>
</openSSL>
...
<https_port>8443</https_port>
<tcp_port_secure>9440</tcp_port_secure>
重启clickhouse进程
5.使用cli连接clickhouse
生成客户端配置文件
cat >clickhouse-client-ssl.xml <<EOF
<config>
<user>default</user>
<password>YOUR_PASSWORD</password>
<host>YOUR_DOMAIN_NAME</host>
<secure>true</secure>
<openSSL>
<client>
<caConfig>/xxxx/ca.pem</caConfig>
<certificateFile>/xxxx/client.pem</certificateFile>
<privateKey>/xxxx/client.key</privateKey>
</client>
</openSSL>
</config>
EOF
使用客户端连接clickhouse
clickhouse client --config=./cickhouse-client-ssl.xml
6.使用dbeaver连接clickhouse
dbeaver需要使用新版本的clickhouse-jdbc驱动,maven下载配置如下:
<dependency>
<!-- please stop using ru.yandex.clickhouse as it's been deprecated -->
<groupId>com.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>0.3.2-patch11</version>
<!-- use uber jar with all dependencies included, change classifier to http for smaller jar -->
<classifier>all</classifier>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
注意,这里的类需要选择com.clickhouse.jdbc.ClickHouseDriver
由于步骤4中生成的客户端私钥是RSA格式的,而clickhouse-jdbc需要的客户端私钥格式是PKCS 8,因此需要将生成的client.key
转换成PKCS 8格式的私钥,转换命令如下
openssl pkcs8 -topk8 -inform PEM -in client.key -outform PEM -nocrypt
将输出在屏幕上的从-----BEGIN PRIVATE KEY-----
至-----END PRIVATE KEY-----
的部分拷贝到一个新文件client.pcs
中.
在dbeaver的驱动属性中配置如下:
7.使用chrome浏览器连接clickhouse
若要使用chrome浏览器直接访问clickhouse, 则需要导入root证书和客户端pfx证书
- 首先,导入root证书,打开
设置
->隐私设置和安全性
->安全
->管理设备证书
,选择受信任的证书颁发机构
,点击导入
,导入ca.pem
- 由于浏览器直接访问strict模式的clickhouse服务端,需要提供PKCS 12格式的证书,使用如下命令,通过客户端证书和私钥生成:
openssl pkcs12 -export -out client.pfx -inkey client.key -in client.pem
按照提示键入密码
- 在
管理设备证书
中的个人
页签导入刚刚生成的client.pfx
证书,输入生成证书时的密码 - 浏览器访问
https://YOUR_DOMAIN_NAME:8443/play
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)