本文讲述如何在单节点的smartbimpp服务器上,开启SSL。

生成证书

高速缓存库,开启ssl配置,需要生成3个证书,分别是根证书(ca证书),服务端证书(高速缓存库服务端配置使用),客户端证书(clickhouse-client客户端配置使用)。

生成ca证书

服务端生成 CA 私钥,生成 ca.key

openssl genrsa -out ca.key 2048

服务端生成自签名 CA 证书,生成 ca.crt,该证书将用于使用 CA 密钥签署其他证书:

以下字段信息,可以自定义,一般是按照地区进行配置。根证书,服务端证书,客户端证书,必须保证这些字段值都相同。
C=CN            ### 国家
ST=GUANGDONG    ### 省份
L=GUANGZHOU     ### 城市
O=SMARTBI       ### 公司名称
OU=RD           ### 部门名称

-days 证书有效期,这里默认配置3650天,证书过期后,可能导致服务无法访问。


openssl req -x509 -subj "/C=CN/ST=GUANGDONG/L=GUANGZHOU/O=SMARTBI/OU=RD/CN=ca" -nodes -key ca.key -days 3650 -out ca.crt

注意:在创建证书请求文件的时候需要注意几点,下面生成服务器请求文件和客户端请求文件均要注意这三点:

1、根证书的CN(Common Name)必须填写 ca ,而所有客户端和服务器端的证书的这个字段需要填写域名或IP地址;

2、根证书的这个 CN 字段和客户端证书、服务器端证书不能一样;

3、其他所有字段值可以自定义,但是根证书、服务器端证书、客户端证书三者需保持一致、最后的密码可以直接回车跳过。

生成服务端证书

创建服务端证书请求(CSR)并生成服务端私钥

1、在创建证书请求(CSR)的时候需要,CN字段信息,可以自定义,配置完成后,jdbc连接 url的地址信息,必须是CN字段的值

2、其他所有字段值,必须保证根证书、服务器端证书、客户端证书三者必须需保持一致。

证书有效期默认10年,项目上可以根据实际情况自行修改。

openssl req -newkey rsa:2048 -nodes -subj "/C=CN/ST=GUANGDONG/L=GUANGZHOU/O=SMARTBI/OU=RD/CN=chnode1.smartbi.com.cn" -keyout chnode1.key -out chnode1.csr
openssl x509 -req -in chnode1.csr -out chnode1.crt -CA ca.crt -CAkey ca.key -days 3650 -CAcreateserial

生成客户端证书

创建客户端证书,并且生成客户端私钥。

1、在创建证书请求(CSR)的时候需要,CN字段信息,可以自定义

2、其他所有字段值,必须保证根证书、服务器端证书、客户端证书三者必须需保持一致。

证书有效期默认10年,项目上可以根据实际情况自行修改。

openssl req -newkey rsa:2048 -nodes -subj "/C=CN/ST=GUANGDONG/L=GUANGZHOU/O=SMARTBI/OU=RD/CN=client1.smartbi.com.cn" -keyout client1.key -out client1.csr
openssl x509 -req -in client1.csr -out client1.crt -CA ca.crt -CAkey ca.key -days 3650

配置高速缓存库

复制证书到指定目录

复制生成的证书到/etc/clickhouse-server/certs 目录

cp ca.crt /etc/clickhouse-server/certs
cp chnode1.crt /etc/clickhouse-server/certs
cp chnode1.key /etc/clickhouse-server/certs
cp client1.crt /etc/clickhouse-server/certs
cp client1.key /etc/clickhouse-server/certs

配置server端的ssl证书

修改/etc/clickhouse-server/config.xml,找到<openSSL> <server> 块的内容,然后参考以下文档进行修改。

<openSSL>
  <server>
    <certificateFile>/etc/clickhouse-server/certs/chnode1.crt</certificateFile>
    <privateKeyFile>/etc/clickhouse-server/certs/chnode1.key</privateKeyFile>
    <verificationMode>relaxed</verificationMode>
    <loadDefaultCAFile>false</loadDefaultCAFile>
    <caConfig>/etc/clickhouse-server/certs/ca.crt</caConfig>
    <cacheSessions>true</cacheSessions>
    <disableProtocols>sslv2,sslv3</disableProtocols>
    <preferServerCiphers>true</preferServerCiphers>
  </server>
</openSSL>

开启https端口


开启 https 端口、取消注释
<https_port>8443</https_port>
开启 ClickHouse Native 安全 TCP 端口、取消注释
<tcp_port_secure>9440</tcp_port_secure>
开启 interserver https 端口、取消注释
<interserver_https_port>9010</interserver_https_port>


禁用非https端口

禁用http端口,增加注释
<!-- <http_port>8123</http_port> -->
禁用 ClickHouse Native 安全 TCP 端口、增加注释
<!-- <tcp_port>9000</tcp_port> -->
禁用 interserver https 端口,增加注释
<!-- <interserver_http_port>9009</interserver_http_port> -->

配置client端(可选)

如果不需要使用clickhouse-client连接clickhouse数据库,则可以不用配置此章节内容。

修改/etc/clickhouse-client/config.xml 找到<openSSL> <client> 块的内容,然后参考以下文档进行修改。

<openSSL>
  <client>
    <loadDefaultCAFile>false</loadDefaultCAFile>
    <caConfig>/etc/clickhouse-server/certs/ca.crt</caConfig>
    <certificateFile>/etc/clickhouse-server/certs/client1.crt</certificateFile>
    <privateKeyFile>/etc/clickhouse-server/certs/client1.key</privateKeyFile>
    <cacheSessions>true</cacheSessions>
    <disableProtocols>sslv2,sslv3</disableProtocols>
    <preferServerCiphers>true</preferServerCiphers>
    <invalidCertificateHandler>
      <name>RejectCertificateHandler</name>
    </invalidCertificateHandler>
  </client>
</openSSL>

连接高速缓存库

smartbi连接高速缓存库

需要上传ca.crt证书到smartbi节点服务器。jdbc的url地址,配置的是chnode1.csr证书的CN字段的值。

sslrootcert需要配置为ca.crt证书的路径

jdbc:clickhouse://chnode1.smartbi.com.cn:8443/default?socket_timeout=1000000&ssl=true&sslmode=strict&sslrootcert=D:/smartbi/ca.crt

clickhouse-client连接高速缓存库

使用clickhouse-client命令行连接高速缓存库,必须配置client端的ssl证书。

clickhouse-client --user default --host 127.0.0.1 --port 9440 --secure --password

附录

ssl证书命令行说明

以下命令行可以查看证书相关信息,配置出现异常时,可以辅助排查问题。

#查看CA证书内容(-text 打印其他所有信息,-noout 不打印证书信息)
openssl x509 -in ca.crt -noout -text 

#查看CA证书内容(-text 打印其他所有信息)
openssl x509 -in ca.crt -text 

#查看Server私钥文件中的私钥信息
openssl rsa -in chnode1.key -text

#查看Server证书详细信息(包括公钥)
openssl x509 -in chnode1.crt -noout -text 

#查看Client私钥文件中的私钥信息
openssl rsa -in client1.key -text 

#查看Client证书详细信息(包括公钥)
openssl x509 -in client1.crt -noout -text 

#检查新生成的服务端证书是否已针对 CA 证书进行验证(通过):
openssl verify -CAfile ca.crt chnode1.crt


其他配置说明,可以查看https://jishuzhan.net/article/1855139748281061377