金仓数据库(KingbaseES)配置 SSL 加密连接,核心是修改服务端的 kingbase.conf 与 sys_hba.conf 两个文件,并准备好证书。整个过程主要围绕"开启开关、指定证书、强制加密"三步展开。
说明:配置 SSL 单向认证,核心是让服务器持有证书,客户端在连接时验证服务器身份,而无需客户端提供证书。
服务端配置步骤
1. 准备 SSL 证书
需要准备服务器私钥(server.key)、服务器证书(server.crt)以及根证书(root.crt)。如果是测试环境,可以用 OpenSSL 生成自签名证书;生产环境建议使用权威 CA 签发的证书。
关键注意点 :私钥文件的权限必须严格限制(如 chmod 600 server.key不允许全局或组用户的任何访问 ),否则数据库出于安全考虑会拒绝启动 SSL 服务。
补充:如果生产环境如果没有权威 CA 签发的证书,可和客户沟通使用OpenSSL 生成自签名证书。
扩展:使用 openssl工具生成证书
为root CA服务器生成私钥、自签名证书
生成根证书私钥
生成2048长度的rsa加密格式的非对称加密算法密钥。
su - kingbase
openssl genrsa 2048 > rootca.key
ls -l rootca.key

使用根服务器的私钥生成自签名根证书
使用根服务器的私钥生成自签名根证书(编者注:证书是为公钥加上了数字签名)。
openssl req -new -x509 -nodes -days 3600 -key rootca.key -out rootca.crt
ls -l rootca.crt
注: 执行命令时,所有选项默认回车即可。

为KES服务器生成私钥、证书请求文件、服务器证书
为KES服务器生成私钥、证书请求文件。
openssl req -newkey rsa:2048 -nodes -keyout kesserver.key -out kesserver.csr
ls -l kesserver.*
注: 如果客户端 sslmode验证等级为verify-full,则会验证[common name】,这里填写服务器的名字或者也可以用 * 号代替表示不限制。


使用root CA的证书和根证书私钥来将KES服务器的证书请求文件,签署为KES服务器证书。
编者注: root CA的证书(自签名根证书),即带数字签名的root CA公钥。
openssl x509 -req -in kesserver.csr -days 3600 -CA rootca.crt -CAkey rootca.key -set_serial 01 -out kesserver.crt
ls -l kesserver.crt

2. 数据库端配置
让KES 服务端支持 SSL/TLS。
将生成的相关证书拷贝到数据库 data目录
将以下生成的相关证书拷贝到数据库 data目录,并对证书私钥重新授权(一定要600权限,否则数据库无法启动)
-
根证书 rootca.crt
-
KES服务器证书 kesserver.crt
-
KES服务器私钥 kesserver.key
cp kesserver.crt sqlserver/sqlserver/
cp kesserver.key sqlserver/sqlserver/
chmod 600 sqlserver/sqlserver/kesserver.key
ls -l sqlserver/sqlserver/kesserver.*

数据库kingbase.conf开启SSL相关参数配置
单向认证场景下,不要 配置 ssl_ca_file。
ssl = on #开启ssl功能
#ssl_ca_file = 'rootca.crt' #指定根证书
ssl_cert_file = 'kesserver.crt' #指定服务器证书
ssl_key_file = 'kesserver.key' #指定服务器私钥
#ssl_crl_file = 'server.key' #指定吊销证书,这里暂时不指定:需要重启数据库生效
数据库sys_hba.conf添加SSL访问路径
单向认证场景下,配置 clientcert=require, 用 require 模式, 服务器不会强制要求客户端出示证书。
hostssl all all 0.0.0.0/0 scram-sha-256 clientcert=require
注: 1. 将原有的ipv4的默认访问条目注释掉。
- clientcert 指定 ssl的验证等级。


重启数据库
sys_ctl restart
客户端连接验证
使用"ksql"以SSL方式连接到KES
客户端连接测试
ksql -h 127.0.0.1 -p 54321 -U system -d test

使用"数据库对象管理工具"连接到KES
和没有开启连接KES步骤一样
其它应用软件如何配置SSL连接
说明:程序不需要修改,改URL连接串就行。开启SSL加密会有3%左右性能损耗,其他没有什么影响
2、应用j连接串配置。
-
jdbc连接串配置
#增加sslmode=verify-require参数
jdbc:kingbase8://vip:54321/databasename?sslmode=verify-require -
Kdbndp驱动连接串配置
SSL Mode SslMode Prefer SSL 模式:Disable/Allow/Prefer/Require/VerifyCA/VerifyFull
SSL Certificate string --- 客户端证书路径
SSL Key string --- 客户端证书私钥路径
SSL Password string --- 客户端证书私钥密码测试环境可以使用:
Server=127.0.0.1;Port=54321;Database=testdb;User Id=SYSTEM;Password=Kingbase123;
SSL Mode=Require;Trust Server Certificate=true;生产环境:
Server=kb-prod;Port=54321;Database=bizdb;User Id=produser;Password=xxx;
SSL Mode=Require;Trust Server Certificate=false;Check Certificate Revocation=false;优先 SSL,服务器不支持 SSL 则降级明文:
Server=192.168.1.100;Port=54321;Database=mydb;User Id=user1;Password=pwd1;
SSL Mode=Prefer;Trust Server Certificate=true;