注册
达梦数据库-ky服务端到Windows客户端配置SSL通信加密(详细教程)
专栏/培训园地/ 文章详情 /

达梦数据库-ky服务端到Windows客户端配置SSL通信加密(详细教程)

Arya 2023/10/23 2518 0 0
摘要

达梦数据库的通信加密是基于安全套接字层(SSL)协议实现的。
⚫ SSL协议使用公钥加密体系并结合对称密钥加密体系来提供身份认证、数据加密、数据完整性校验、数字签名 等一系列的服务。
⚫ 为了保证通信双方是可信任的,公钥加密体系中的公钥都是以数字证书形式存在。
⚫ 启用通信加密后,客户端、服务器须使用相配套文件的证书文件,并置于指定目录下。
本篇将介绍如何配置ssl通信加密

环境配置

操作系统:4.19.90-24.4.v2101.ky10.x86_64
达梦数据库版本: DM Database Server 64 V8
openssl版本:OpenSSL 1.1.1f
java版本:1.8

openssl环境

检查是否安装

openssl version -a

image.png
如果没有可以安装一个

java环境

java -version

image.png

修改openssl配置文件

首先需要修改openssl.cnf文件,默认放置在/etc/pki/tls/openssl.cnf
原先配置文件如下,
dir:所有生成的文件存放的默认路径
database:签发过的证书的列表文件
new_certs_dir:存放所有新签发的证书
serial:下一个要签发的证书的序号,第一个从1开始
certificate:CA的证书文件的名字
private_key:CA的私钥文件的名字
default_days:签发证书的默认有效期,
default_bit:私钥默认的长度大小,
可以进行修改dir 等相关操作的配置,本章节需要修改dir的路径,便于查找。
image.png
修改后:
image.png
修改配置文件后,我们需要再指定位置新建以上所有文件夹
在opt目录下新建一个CA文件目录,并且需要ca文件夹下再创建newcerts,ca文件夹下创建一个内容为空的index.txt;创建一个内容为01的serial文件;

[root@localhost ~]# vim /etc/pki/tls/openssl.cnf
[root@localhost ~]# mkdir -p /opt/CA
[root@localhost ~]# cd /opt/CA
[root@localhost CA]# mkdir {certs,crl,newcerts}
[root@localhost CA]# vim /etc/pki/tls/openssl.cnf
[root@localhost CA]# echo "01" > serial
[root@localhost CA]# touch index.txt
[root@localhost CA]# mkdir server_ssl
[root@localhost CA]# mkdir client_ssl
[root@localhost CA]# mkdir -p client_ssl/SYSDBA

生成CA私钥和根证书

[root@localhost CA]# openssl req -new -x509 -days 3650 -keyout ca-key.pem -out ca-cert.pem -subj "/C=cn/ST=hunan/L=changsha/O=dameng/OU=dev/CN=lw/emailAddress=abc@dm.com"
Generating a RSA private key
................................................................................                                                  ................................................................................                                                  ....................................+++++
..+++++
writing new private key to 'ca-key.pem'

查看是否生成
image.png
其中ca-key.pem 为私钥文件,ca-cert.pem为根证书

生成服务器私钥和被CA签名的证书

生成私钥文件 无密码版本

openssl genrsa -out server_ssl/server-key.pem

image.png
ps:注意服务器端的私钥,为了方便不设置加密

生成证书签发申请

 openssl req -new -key server_ssl/server-key.pem -out server_ssl/server.csr -subj "/C=cn/ST=hunan/L=changsha/O=dameng/OU=dev/CN=server/emailAddress=server@dm.com"

生成 server经ca签名的证书server-cert.pem

openssl ca -days 365 -in client_ssl/SYSDBA/client.csr -out client_ssl/SYSDBA/client-cert.pem

ps:注意上面的配置文件的写入是否正确。
image.png

将证书格式转换为x509格式

openssl x509 -in server_ssl/server-cert.pem -out server_ssl/server.cer

查看是否生成
image.png

将CA自签名的证书拷贝到server_ssl目录中

cp ca-cert.pem server_ssl/
cp ca-key.pem server_ssl/

image.png

生成客户端用户私钥和被CA签名的证书

生成私钥文件

openssl genrsa -aes256 -out client_ssl/SYSDBA/client-key.pem

image.png
ps:#-aes256表示使用AES算法对产生的私钥加密

生成证书签发申请

openssl req -new -key client_ssl/SYSDBA/client-key.pem -out client_ssl/SYSDBA/client.csr -subj "/C=cn/ST=hunan/L=changsha/O=dameng/OU=dev/CN=SYSDBA/emailAddress=dmclient@dm.com"

image.png

使用根证书和签发申请生成证书

openssl ca -days 365 -in client_ssl/SYSDBA/client.csr -out client_ssl/SYSDBA/client-cert.pem

image.png

将生成的X509格式的client-key.pem和client-cert.pem合并转换为pkcs12格式的文件client-pkcs.p12

openssl pkcs12 -export -inkey client_ssl/SYSDBA/client-key.pem -in client_ssl/SYSDBA/client-cert.pem -out client_ssl/SYSDBA/client-pkcs.p12

image.png

生成JDBC访问需要的.keystore文件

导入所有证书到keystore文件,并设置keystore文件密码为export password(-deststorepass)

keytool -import -alias ca -trustcacerts -file ca-cert.pem -keystore client_ssl/SYSDBA/.keystore -deststorepass abc123 -noprompt

keytool -import -alias server -trustcacerts -file server_ssl/server.cer -keystore client_ssl/SYSDBA/.keystore -deststorepass abc123 -noprompt

keytool -importkeystore -srckeystore client_ssl/SYSDBA/client-pkcs.p12 -srcstorepass abc123  -srcstoretype PKCS12 -keystore client_ssl/SYSDBA/.keystore  -deststorepass abc123

image.png
执行警告
image.png
这个警告不用管

将CA自签名的证书拷贝到client_ssl/SYSDBA目录中

cp ca-cert.pem client_ssl/SYSDBA/

查看是否成功
image.png

部署SERVER端证书

将/opt/ca/server_ssl整个目录拷贝到达梦数据库安装目录下的bin目录下,默认在bin目录下存在server_ssl目录。可以先将默认的server_ssl目录重命名,然后拷贝。

cd /home/dmdba/dmdbms/bin
mv server_ssl server_ssl_bak2
cp /opt/CA/server_ssl ./ -r
chmod -R 777 server_ssl

image.png
image.png
查看是否成功
image.png
一共6个文件。注意查看下文件大小,如果和正常的文件有差异,建议重新弄一遍,以免配置文件出现问题。

部署client端证书

将/opt/ca/client_ssl中弄好的文件全部拷贝到需要部署的主机上面。本次安装的客户端在Windows上,因此直接将/bin目录下的client_ssl目录改为client_ssl2备份处理,再将虚拟机中的文件全部拷贝过来。
如果是Linux机器,需要注意目录权限,可以将整个目录设置为777权限。
image.png

数据库启用SSL认证和通信加密

是否使用通信加密以DM数据库服务器端的设置为准,即通过设置服务器配置文件dm.ini中的ENABLE_ENCRYPT或者COMM_ENCRYPT_NAME参数来指定,ENABLE_ENCRYPT可以开启传输层通讯加密,COMM_ENCRYPT_NAME可以开启应用层消息通讯加密,两个层次上的加密是互不干扰,互不影响,可以同时开启这两个层次上的加密,也可以开启其中一个,如果开启传输层消息加密需要配置SSL证书。客户端以服务器采用的通信方式与其进行通信。

ENABLE_ENCRYPT:取值0、1和2,含义义分别为:

0表示在传输层不开启SSL认证和SSL通信加密;
1表示在传输层开启SSL认证和SSL通信加密;
2表示在传输层仅开启SSL认证,但不开启SSL加密。
COMM_ENCRYPT_NAME参数用来指定应用层消息通信的加密算法名,指定加密算法后,即可开启应用层通信加密(无需配置ENABLE_ENCRYPT)。如果为空则不进行通信加密;如果给的加密算法名错误,则使用加密算法DES_CFB。应用层的这种加密非常适合两端缺少数字证书的情况。
DM支持的加密算法名可以通过查询动态视图V$CIPHERS获取。
登录服务端

登录disql 或者管理工具
---开启应用层通讯加密(测试通讯加密)
SF_SET_SYSTEM_PARA_VALUE('COMM_ENCRYPT_NAME','RC4',1,2);

---开启SSL认证(测试SSL认证登录)
SQL> SF_SET_SYSTEM_PARA_VALUE('ENABLE_ENCRYPT',2,1,2);

image.png
也可以直接在dm.ini文件,修改ENABLE_ENCRYPT参数为1,并设置COMM_ENCRYPT_NAME加密算法,加密算法按照用户个人需求填写,具体有哪些加密算法,可以参考DM安全管理手册,本次使用的是RC4。

重启数据库

退出disql
使用服务名重新启动

./DmServiceDMSERVER restart

image.png

ssl认证登录

客户端使用SSL认证登录测试

disql SYSDBA/SYSDBA@192.168.***.***:5236#"{SSL_PATH=D:\dameng\bin\client_ssl\SYSDBA,SSL_PWD=dameng}"

服务器[192.168.***.***:5236]:处于普通打开状态
登录使用时间 : 52.493(ms)
disql V8

image.png

使用管理工具登录测试

管理工具连接数据库的方式是通过JDBC,所以SSL密码为keystore文件密码,而非客户端私钥密码。

image.png
image.png
在管理工具下端可以查看是否为通信加密
image.png
全部配置完成。
更多资讯请上达梦技术社区了解:https://eco.dameng.com/

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服