金仓数据库配置SSL双向认证

金仓数据库(KingbaseES)配置 SSL 加密连接,核心是修改服务端的 kingbase.conf 与 sys_hba.conf 两个文件,并准备好证书。整个过程主要围绕"开启开关、指定证书、强制加密"三步展开。

服务端配置步骤

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
为KES客户端生成私钥、证书请求文件、客户端证书
生成客户端证书请求文件和私钥。
复制代码
openssl req -newkey rsa:2048 -nodes -keyout kingbase.key -out kingbase.csr
ls -l kingbase.*

注: 当服务器端验证clientcert=verify-full等级,则会验证[comnon name 】,这里可以填写可以使用此证书的用户名,例如数据库默认的system用户,或者也可以用*号表示不限制。

使用根证书和根证书私钥来签署客户端证书
复制代码
openssl x509 -req -in kingbase.csr -days 3600 -CA rootca.crt -CAkey rootca.key -set_serial 02 -out kingbase.crt
ls -l kingbase.crt
生成PKCS8格式的客户端私钥文件

生成PKCS8格式的客户端私钥文件,("数据库对象管理工具"不支持默认格式,需转为pk8格式)。

复制代码
openssl pkcs8 -topk8 -outform DER -in kingbase.key -out kingbase.pk8 -nocrypt
ls -l kingbase.pk8

2. 数据库端配置

让KES 服务端支持 SSL/TLS。

将生成的相关证书拷贝到数据库 data目录

将以下生成的相关证书拷贝到数据库 data目录,并对证书私钥重新授权(一定要600权限,否则数据库无法启动)

  • 根证书 rootca.crt

  • KES服务器证书 kesserver.crt

  • KES服务器私钥 kesserver.key

    cp rootca.crt sqlserver/sqlserver/
    cp kesserver.crt sqlserver/sqlserver/
    cp kesserver.key sqlserver/sqlserver/
    chmod 600 sqlserver/sqlserver/kesserver.key
    ls -l sqlserver/sqlserver/kesserver.key

数据库kingbase.conf开启SSL相关参数配置

复制代码
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访问路径

复制代码
hostssl	all	all	0.0.0.0/0		scram-sha-256 clientcert=verify-ca 或 verify-full

注: 1. 将原有的ipv4的默认访问条目注释掉。

  1. clientcert 指定 ssl的验证等级。

重启数据库

复制代码
sys_ctl restart

客户端连接验证

使用"ksql"以SSL方式连接到KES

复制客户端证书文件

  1. 在当前用户家目录创建.kingbase的隐藏文件夹。

  2. 将 rootca. crt、kingbase. crt、kingbase. key 拷贝/home/kingbase/.kingbase 的文件夹。

  3. 证书私钥重新授权**(一定要600权限,否则无法使用此密钥链接数据库)**。

    mkdir .kingbase
    cp rootca.crt /home/kingbase/.kingbase/
    cp kingbase.crt /home/kingbase/.kingbase/
    cp kingbase.key /home/kingbase/.kingbase/
    ls -l .kingbase

客户端连接测试

复制代码
ksql -h 127.0.0.1 -p 54321 -U system -d test

使用"数据库对象管理工具"以SSL方式连接到KES

选择客户端证书文件

选择根证书,客户端证书,客户端私钥,注意java连接数据库使用kingbase.pk8私钥文件。

连接测试

客户端工具ssl方式登录图标显示会有个小箭头,登录后也可以在数据库中通过sys_stat_ssl视图查

询到ssl连接的相关信息。

其它应用软件如何配置SSL连接

说明:程序不需要修改,改URL连接串就行。开启SSL加密会有3%左右性能损耗,其他没有什么影响

1、下载客户端证书文件到相应的服务器上。

(1)根证书rootca.crt

(2)客户端证书kingbase.crt

(3)服务器私钥kingbase.pk8

2、应用j连接串配置。

  1. jdbc连接串配置

    #将root.crt、kingbase.crt和kingbase.pk8 提供给应用工程师,调整URL配置
    jdbc:kingbase8://vip:54321/databasename?sslmode=verify-ca&sslrootcert=/xxx/xxx/root.crt&sslcert=/xxx/xxx/kingbase.crt&sslkey=/xxx/xxx/kingbase.pk8

  2. 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;

    Host=127.0.0.1;Port=5432;Database=mydb;Username=system;Password=xxx;
    SSL Mode=VerifyCA;
    Root Certificate=/opt/cert/ca.crt;
    SSL Certificate=/opt/cert/client.crt;
    SSL Key=/opt/cert/client.key;
    SSL Password=your_private_key_password

参考链接:金仓数据库 SSL 配置指南:5 步搞定安全连接 -- 数据库平替用金仓

相关推荐
captain3761 小时前
MyBatis操作数据库(入门1)
数据库·oracle·mybatis
snpgroupcn1 小时前
SAP 系统退役的归档架构怎么设计:可检索、可理解、可追溯、可证明
java·数据库·架构
清水白石0081 小时前
React Native与Flutter长期维护成本对比
开发语言·数据库
弦儿1 小时前
MySQL 数据库从入门到实践:SQL 四大分类 + DDL/DML/DQL 全梳理(附全套代码)
数据库
K成长日志1 小时前
BLE Host层L2CAP -- 状态机
物联网·网络协议·无线通信·蓝牙·iot·ble
一个天蝎座的程序猿1 小时前
金仓KingbaseES的数据集成软件,我用了一年多,把KDTS和KFS的用法还有踩过的坑一次说清
数据库
泡海椒2 小时前
JQuick-SQL CASE WHEN 与函数:在查询中构建业务字段
数据库·sql
一个天蝎座的程序猿2 小时前
2TB传感器数据搬迁记:IoTDB数据导入导出实战详解(CSV/SQL/TsFile全踩了一遍)
数据库
charlotte102410242 小时前
Redis 简介:从诞生到数据类型,再到缓存三大问题
数据库·redis·缓存