本文讲述如何在单节点的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