Clickhouse配置SSL双向认证

举报
搬砖使我快乐 发表于 2022/12/28 11:36:11 2022/12/28
【摘要】 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
image.png
由于步骤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的驱动属性中配置如下:
image.png

7.使用chrome浏览器连接clickhouse

若要使用chrome浏览器直接访问clickhouse, 则需要导入root证书和客户端pfx证书

  • 首先,导入root证书,打开设置->隐私设置和安全性->安全->管理设备证书,选择受信任的证书颁发机构,点击导入,导入ca.pem
    image.png
  • 由于浏览器直接访问strict模式的clickhouse服务端,需要提供PKCS 12格式的证书,使用如下命令,通过客户端证书和私钥生成:
openssl pkcs12 -export -out client.pfx -inkey client.key -in client.pem

按照提示键入密码

  • 管理设备证书中的个人页签导入刚刚生成的client.pfx证书,输入生成证书时的密码
  • 浏览器访问https://YOUR_DOMAIN_NAME:8443/play
    image.png
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。