注册
ssl配置记录:如何配置达梦数据库的ssl加密
专栏/技术分享/ 文章详情 /

ssl配置记录:如何配置达梦数据库的ssl加密

青空 2026/09/18 409 0 0
摘要

1. 背景

近期工作发现很多客户需要配置ssl,因为使用量较大,所以记录一个文档方便复用,也方便其他同事参考

2. 做法

2.1. 前置要求

  • 达梦数据库DM8或以上版本
  • 已安装OpenSSL工具
  • 具有数据库管理员权限(SYSDBA)

这里我的环境是这样的:

内容 版本/类型
操作系统 Kylin-Server-V10-SP3-2403
CPU x86_64bit
达梦数据库 达梦8

2.2. 配置数据库dm.ini启用加密

通过调整dm.ini中的ENABLE_ENCRYPT参数,可以控制服务端与客户端通信的加密与身份认证行为,修改该参数后需要重启数据库服务才能生效。

dm.ini 中的 ENABLE_ENCRYPT 控制 SSL 加密与认证行为,取值含义如下:

取值 加密 认证 说明
0 ✗ ✗ 不加密、不认证,默认值
1 ✓ ✓ 加密+双向认证
2 ✗ ✓ 仅认证,不加密
4 ✓ ✗ 仅加密,不认证

编辑dm.ini文件,设置以下参数:

ENABLE_ENCRYPT = 1
MIN_SSL_VERSION = 771

其中ENABLE_ENCRYPT取值说明:

  • 0:不开启SSL加密
  • 1:开启SSL加密(双向认证+加密)
  • 2:仅开启SSL认证,不加密

修改完成后重启数据库服务:

systemctl restart DmServiceHRSVR

2.3. 配置SSL证书

2.3.1. 生成CA根证书

在服务器上创建CA目录并生成根私钥和自签名CA证书:

mkdir -p /opt/ca cd /opt/ca openssl genrsa -aes256 -out ca-key.pem -passout pass:Dameng123 2048 openssl req -x509 -new -nodes -key ca-key.pem -sha256 -days 3650 -out ca-cert.pem -subj "/C=cn/ST=hunan/L=changsha/O=dm/OU=dev/CN=dm-ca"

2.3.2. 生成服务端证书

mkdir -p /dm/dmdbms/bin/server_ssl openssl genrsa -out server-key.pem 2048 openssl req -new -key server-key.pem -out server.csr -subj "/C=cn/ST=hunan/L=changsha/O=dm/OU=dev/CN=server" openssl x509 -req -in server.csr -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -days 3650 -sha256 -passin pass:Dameng123

2.3.3. 生成客户端证书

客户端证书目录必须以数据库用户名命名,这里以SYSDBA为例:

mkdir -p /dm/dmdbms/bin/client_ssl/SYSDBA openssl genrsa -out client-key.pem -aes256 -passout pass:Dameng123 2048 openssl req -new -key client-key.pem -out client.csr -subj "/C=cn/ST=hunan/L=changsha/O=dm/OU=dev/CN=SYSDBA" openssl x509 -req -in client.csr -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem -days 3650 -sha256 -passin pass:Dameng123

将CA根证书拷贝到客户端目录:

cp /opt/ca/ca-cert.pem /dm/dmdbms/bin/client_ssl/SYSDBA/

2.3.4. 私钥的两种形式

客户端私钥可以带密码,也可以不带密码:

  • 无密码私钥:客户端加载时不需要提供密码,配置简单
  • 加密私钥:私钥文件本身被密码保护,客户端加载时需要提供密码

生成带密码的私钥:

openssl genrsa -aes256 -out client-key.pem -passout pass:Dameng123 2048

生成不带密码的私钥:

openssl genrsa -out client-key.pem 2048

已经生成的私钥可以互相转换。带密码转成不带密码:

openssl rsa -in client-key.pem -passin pass:Dameng123 -out client-key-nopwd.pem

不带密码转成带密码:

openssl rsa -in client-key-nopwd.pem -aes256 -passout pass:Dameng123 -out client-key-enc.pem

私钥的加密与解密只改变文件本身的存储形式,密钥内容不变,因此转换前后的私钥都可以与同一张证书配对使用。

判断私钥是否带密码,可以查看文件开头两行,出现Proc-Type: 4,ENCRYPTED即为带密码:

head -2 client-key.pem

2.3.5. 验证私钥与证书是否配对

如果私钥与证书不匹配,连接时会报初始化SSL环境失败,具体错误为tls: private key does not match public key。可以通过对比公钥指纹确认。

查看证书的公钥指纹:

openssl x509 -in client-cert.pem -pubkey -noout | openssl md5

查看无密码私钥的公钥指纹:

openssl rsa -in client-key.pem -pubout | openssl md5

查看带密码私钥的公钥指纹:

openssl rsa -in client-key.pem -passin pass:Dameng123 -pubout | openssl md5

两个指纹一致说明私钥与证书配对,不一致则说明私钥用错了,需要更换。

2.4. ssl方式连接启用加密的达梦数据库

数据库开启SSL后,disql客户端需要加载客户端证书。disql默认从$DM_HOME/bin/client_ssl/用户名/目录下加载证书,因此只要保证DM_HOME环境变量正确,直接连接即可:

export DM_HOME=/dm/dmdbms export LD_LIBRARY_PATH=/dm/dmdbms/bin:$LD_LIBRARY_PATH disql SYSDBA/Dameng123@localhost:5237

也可以直接进入安装目录执行,此时不需要设置DM_HOME:

cd /dm/dmdbms/bin ./disql SYSDBA/Dameng123@localhost:5237

如果报错stat private key fail或初始化SSL环境失败,说明disql没有找到证书目录。需要检查:

  • DM_HOME环境变量是否设置
  • 证书是否放在client_ssl/用户名/目录下,且目录名与用户名一致
  • 证书目录权限是否可读

2.4.1. 命令行指定证书路径

disql支持通过扩展选项指定证书路径,语法如下:

disql 用户名/密码@主机:端口#"{ssl_path=证书目录,ssl_pwd=私钥密码}"

但是在我的环境下这个命令有一些问题,还在排查为什么

2.4.2. LOGIN交互模式

如果客户端证书和数据库不在同一台机器,或者需要临时指定证书路径,可以使用LOGIN交互模式(但是感觉挺繁琐的):

disql /nolog SQL> login

按照提示依次输入:

服务名: localhost:5237
用户名: SYSDBA
密码: Dameng123
SSL路径: /dm/dmdbms/bin/client_ssl/SYSDBA
SSL密码: 123
UKEY名称:
UKEY PIN码:
MPP类型:
是否读写分离(y/n): n
协议类型: TCP

其中SSL密码在私钥没有加密时可以直接回车,或输入任意数字。

3. 附录

3.1. 背景知识

3.1.1. SSL是什么

SSL是一种网络安全协议,用于在客户端和服务器之间建立安全通信,能够实现数据加密、身份验证,以及保护数据完整性

在数据库领域,普通连接和SSL连接的主要区别是,普通连接在网络上明文传输SQL和账号密码;SSL连接会先建立加密通道,再传业务数据

SSL分为单向认证和双向认证

  • 单向认证时只有客户端检验服务端,服务端不会检验客户端
  • 双向认证时服务端也会检验客户端

当数据库切换到SSL/TLS认证模式后,disql和go程序都必须带证书相关参数,否则连不上

3.1.2. CA证书是什么

单向认证时,客户端主要校验服务端证书是否可信;双向认证时,客户端和服务端会互相校验身份。CA证书的作用就是提供这一层信任关系

3.2. 参考文档

  1. 达梦数据库配置SSL通信加密 | 达梦技术社区
  2. 达梦数据库配置SSL通信加密 | CSDN
  3. DM Go 编程指南 | 达梦技术文档
  4. 达梦数据库配置SSL认证加密 | 达梦技术社区
  5. 达梦数据库配置SSL认证加密登录测试以及问题处理 | 达梦技术社区
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服