KingbaseV8R6配置SSL

一、准备工作

a.获取镜像并加载
官方下载地址
kingbase_v8r6.tar

bash 复制代码
docker load -i kingbase_v8r6.tar

b.创建数据目录

bash 复制代码
# 创建数据持久化目录和 SSL 证书目录
mkdir -p /opt/docker/kingbaseV8R6_ssl/data /opt/docker/kingbaseV8R6_ssl/ssl
chmod -R 777 /opt/docker/kingbaseV8R6_ssl

二、生成SSL证书

使用 OpenSSL 生成自签名证书(在宿主机执行):

a.进入ssl目录

bash 复制代码
cd /opt/docker/kingbaseV8R6_ssl/ssl/

b.生成服务端证书

bash 复制代码
# 1. 生成 CA 根证书和私钥
openssl genrsa -out root.key 2048
openssl req -new -x509 -days 3650 -key root.key -out root.crt \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=Kingbase/CN=CA"

# 2. 生成服务器私钥和证书请求(CSR)
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=Kingbase/CN=localhost"
# 如果 openssl req报错:Can't open /usr/local/openssl/openssl.cnf for reading, No such file or directory
# 是因为找不到openssl.cnf配置文件,可以使用find命令查找:
# find / -name "openssl.cnf" 2>/dev/null
# 例如找到的路径为 /etc/pki/tls/openssl.cnf ,则添加 -config 指定配置文件
# openssl req -new -key server.key -out server.csr -config /etc/pki/tls/openssl.cnf \
#   -subj "/C=CN/ST=Beijing/L=Beijing/O=Kingbase/CN=localhost"

# 3. 使用 CA 签署服务器证书
openssl x509 -req -days 3650 -in server.csr \
  -CA root.crt -CAkey root.key -set_serial 01 -out server.crt

# 4. 设置私钥权限(数据库要求严格权限)
chmod 600 server.key
chmod 600 root.key

# 5. 验证证书
openssl verify -CAfile root.crt server.crt

c.生成客户端证书

bash 复制代码
# 生成客户端私钥
openssl genrsa -out client.key 2048

# 生成客户端证书请求(CSR)
openssl req -new -key client.key -out client.csr \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=Kingbase/CN=system"  # CN 使用数据库用户名

# 使用 CA 签署客户端证书
openssl x509 -req -days 3650 -in client.csr \
  -CA root.crt -CAkey root.key -set_serial 02 -out client.crt

# 设置权限
chmod 600 client.key

d.转换客户端私钥格式
JDBC 驱动不支持 PEM 格式的 RSA 私钥,需要转换为 PKCS#8 格式。

bash 复制代码
openssl pkcs8 -topk8 -inform PEM -outform DER -in client.key -out client.pk8 -nocrypt

三、运行容器

a.运行(数据库密码根据实际情况修改)

bash 复制代码
docker run -d \
  --name kingbase_ssl \
  --privileged=true \
  --restart=always \
  -p 44321:54321 \
  -v /opt/docker/kingbaseV8R6_ssl/data:/home/kingbase/userdata \
  -v /opt/docker/kingbaseV8R6_ssl/ssl:/home/kingbase/ssl \
  -e DB_USER=system \
  -e DB_PASSWORD={{自定义密码}} \
  -e DB_MODE=oracle \
  -e NEED_START=yes \
  kingbase_v008r006c008b0020_single_x86:v1 \
  /usr/sbin/init

b.查看日志

bash 复制代码
docker logs -f kingbase_ssl

c.客户端连接测试

连接信息如下:

hostname: localhost

port: 44321

username1: system

password1: {{自定义密码}}

四、配置SSL

a.进入容器

bash 复制代码
docker exec -it kingbase_ssl bash

b.将证书复制到数据目录

bash 复制代码
cp /home/kingbase/ssl/server.crt /home/kingbase/userdata/data
cp /home/kingbase/ssl/server.key /home/kingbase/userdata/data
cp /home/kingbase/ssl/root.crt /home/kingbase/userdata/data
cp /home/kingbase/ssl/client.crt /home/kingbase/userdata/data
cp /home/kingbase/ssl/client.key /home/kingbase/userdata/data

c.修改 kingbase.conf 配置文件

bash 复制代码
vi /home/kingbase/userdata/data/kingbase.conf

# 修改或添加如下内容:
ssl = on                                    # 开启 SSL
ssl_cert_file = 'server.crt'                # 服务器证书
ssl_key_file = 'server.key'                 # 服务器私钥
ssl_ca_file = 'root.crt'                    # CA 根证书(用于客户端认证)

d.修改 sys_hba.conf 配置文件

bash 复制代码
vi /home/kingbase/userdata/data/sys_hba.conf

# 修改或添加如下内容:
hostssl    all    all    0.0.0.0/0    md5        clientcert=verify-ca

只保留 local 和 hostssl ,注释host,则只允许SSL连接

五、重启数据库

bash 复制代码
# 退出容器
exit

# 重启
docker restart kingbase_ssl

六、验证SSL连接

a.ksql验证

需要用到证书文件:client.crt、client.key、root.crt

bash 复制代码
# 执行如下命令并输入密码后登录成功
ksql "host=localhost port=54321 user=system dbname=test sslmode=verify-ca sslcert=client.crt sslkey=client.key sslrootcert=root.crt"
# 执行如下SQL语句
SELECT ssl, version, cipher FROM sys_stat_ssl WHERE pid = pg_backend_pid();
# 出现如下内容,则是SSL连接
 ssl | version |         cipher         
-----+---------+------------------------
 t   | TLSv1.3 | TLS_AES_256_GCM_SHA384

b.dbeaver验证

需要用到证书文件:client.crt、client.pk8 、root.crt

设置如下四个驱动属性:


相关推荐
风和先行6 分钟前
Android 数据库相关学习总结
android·数据库·学习
宠友信息16 分钟前
Spring Boot与异步审核构建仿小红书源码内容发布全流程
java·数据库·spring boot·redis·mysql·oracle·uni-app
2401_873479401 小时前
如何识别代理IP和伪装流量?用IP情报工具三步穿透住宅代理伪装
网络·数据库·网络协议·tcp/ip·ip
诚信定制8391 小时前
如何启动 Redis 服务:详细步骤指南
数据库·redis·缓存
AllData公司负责人1 小时前
数据同步平台|AIIData数据中台实现MySQL、Hive、Kafka 一键接入Doris
大数据·数据库·hive·mysql·kafka·实时同步
Edward111111111 小时前
一AI名词
java·开发语言·数据库·学习
hey you~1 小时前
400电话选型技术测评:一个开发视角的线路质量评估方案
运维·网络·数据库·400电话·企业通信
Database_Cool_1 小时前
实时计数器/排行榜首选:阿里云 Tair 高并发数据结构实践
数据结构·数据库·阿里云·云计算
言乐61 小时前
Python视频相对亮度检测
数据库·python·计算机视觉·小程序·音视频
snow@li2 小时前
中台:中台即复用 / 理解企业架构中的能力抽象与分层共享 / 中台体系全景梳理 / 共性能力抽象、沉淀并复用
数据库