专栏/培训园地/ 文章详情 /

达梦数据库配置SSL通信加密

花花- 2024/06/21 1397 0 1
摘要

DM 提供两种通信加密方式:一基于传输层的 SSL 协议加密;二基于应用层的消息包加密。两个层次的加密互不影响,可以同时使用.
本篇内容将详细介绍达梦数据库如何配置SSL通信加密。

一、环境信息

操作系统:

[root@localhost ~]# uname -a
Linux 10-8-148-14 4.18.0-147.uelc20.x86_64 #1 SMP Wed Jul 8 03:49:13 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

复制

openssl环境:

首先可以检查之前是否安装过:

[root@localhost ~]# openssl version -a
OpenSSL 1.1.1c FIPS  28 May 2019
built on: Tue Jun 30 15:50:42 2020 UTC
platform: linux-x86_64
options:  bn(64,64) md2(char) rc4(8x,int) des(int) idea(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2         -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardene        d-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -f        cf-protection -Wa,--noexecstack -Wa,--generate-missing-build-notes=yes -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -DOPENSSL_U        SE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPEN        SSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGH        ASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DZLIB -DNDEBUG -DPURIFY -DDEVRANDOM="\"/dev/urandom\"" -DSYSTEM_CIPHERS_        FILE="/etc/crypto-policies/back-ends/openssl.config"
OPENSSLDIR: "/etc/pki/tls"
ENGINESDIR: "/usr/lib64/engines-1.1"
Seeding source: os-specific
engines:  rdrand dynamic

复制

如果没有安装:
1、官网地址下载openssl软件库包;
2、选择适合版本下载安装,注意安装路径位置不要带有空格或者中文字符,其他默认下一步即可;

java环境:

检查java版本

[dmdba@localhost etc]$ java -version
java version "1.8.0_341"
Java(TM) SE Runtime Environment (build 1.8.0_341-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.341-b10, mixed mode)

复制

如果没有安装:
1、通过Oracle官方下载
2、解压安装包

[dmdba@localhost jdk]$ tar -zxvf /jdk/jdk-8u341-linux-x64.tar.gz

复制

3、在/etc/profile 中配置linux 系统环境

[dmdba@localhost etc]$ vim /etc/profile

复制

在最下方添加以下信息

JAVA_HOME=/jdk/jdk1.8.0_341        #指JAVA_HOME环境
PATH=/jdk/jdk1.8.0_341/bin:$PATH   #指jdk的路径
export JAVA_HOME PATH              #让环境变量生效

复制

让配置生效

source /etc/profile

复制

验证安装

java -version

复制

二、修改openssl配置文件

1、打开openssl.cnf文件,默认放置在/etc/pki/tls/openssl.cnf
dir:所有生成的文件存放的默认路径
database:签发过的证书的列表文件
new_certs_dir:存放所有新签发的证书
serial:下一个要签发的证书的序号,第一个从1开始
certificate:CA的证书文件的名字
private_key:CA的私钥文件的名字
default_days:签发证书的默认有效期
default_bit:私钥默认的长度大小
2、修改[ CA_default ]这一段内容部分配置项,指定ca目录,修改如下,放在/opt/ca下,其余默认。

####################################################################
[ CA_default ]

dir             = /opt/ca           # Where everything is kept
certs           = $dir/certs            # Where the issued certs are kept
crl_dir         = $dir/crl              # Where the issued crl are kept
database        = $dir/index.txt        # database index file.
#unique_subject = no                    # Set to 'no' to allow creation of
                                        # several certs with same subject.
new_certs_dir   = $dir/newcerts         # default place for new certs.

certificate     = $dir/cacert.pem       # The CA certificate
serial          = $dir/serial           # The current serial number
crlnumber       = $dir/crlnumber        # the current crl number
                                        # must be commented out to leave a V1 CRL
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/private/cakey.pem # The private key

复制

3、创建相关目录,在opt目录下新建一个ca文件目录,并且在ca文件夹下再创建newcerts,ca文件夹下创建一个内容为空的index.txt,再创建一个内容为01的serial文件;

[root@localhost etc]# cd /opt
[root@localhost opt]# mkdir ca
[root@localhost opt]# cd /opt/ca
[root@localhost opt]# mkdir {certs,crl,newcerts}
[root@localhost opt]# echo "01" > serial
[root@localhost opt]# touch index.txt
[root@localhost opt]# mkdir server_ssl
[root@localhost opt]# mkdir client_ssl
[root@localhost opt]# 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'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
#此处设置密码:12345678(可自行设置)

复制

查看是否成功

[root@localhost ca]# ls
ca-cert.pem  ca-key.pem  certs  client_ssl  crl  index.txt  newcerts  serial  server_ssl

复制

其中ca-key.pem 为私钥文件,ca-cert.pem为根证书。

四、生成服务端私钥和被CA签名的数字证书

1、生成私钥文件

[root@localhost ca]# openssl genrsa -out server_ssl/server-key.pem
Generating RSA private key, 2048 bit long modulus (2 primes)
.................................................................................................................+++++
..............................................................+++++
e is 65537 (0x010001)
##注意服务器端的私钥,为了方便不设置加密

复制

2、生成证书签发申请

[root@localhost ca]# 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

复制

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

[root@localhost ca]# openssl ca -days 3650 -in server_ssl/server.csr -out server_ssl/server-cert.pem
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /opt/ca/ca-key.pem:                # 输入生成CA私钥时设置的存储密码
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Aug 11 09:23:40 2021 GMT
            Not After : Aug  9 09:23:40 2031 GMT
        Subject:
            countryName               = cn
            stateOrProvinceName       = hunan
            organizationName          = dameng
            organizationalUnitName    = dev
            commonName                = server
            emailAddress              = server@dm.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                46:E9:80:E8:CC:1D:7E:DB:E3:05:FF:8C:3B:77:43:51:9B:16:05:43
            X509v3 Authority Key Identifier: 
                keyid:61:05:BE:3F:A9:DE:2D:9A:7F:2A:BA:0E:45:97:47:5B:E8:0C:D7:7E

Certificate is to be certified until Aug  9 09:23:40 2031 GMT (3650 days)
Sign the certificate? [y/n]:y                       #输入y


1 out of 1 certificate requests certified, commit? [y/n]y      #输入y
Write out database with 1 new entries
Data Base Updated

复制

4、将证书格式转换为x509格式

[root@localhost ca]# openssl x509 -in server_ssl/server-cert.pem -out server_ssl/server.cer

复制

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

[root@localhost ca]# cp ca-cert.pem server_ssl/
[root@localhost ca]# cp ca-key.pem server_ssl/

复制

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

1、生成私钥文件

[root@localhost ca]# openssl genrsa -aes256 -out client_ssl/SYSDBA/client-key.pem
Generating RSA private key, 2048 bit long modulus (2 primes)
............................+++++
..+++++
e is 65537 (0x010001)
Enter pass phrase for client_ssl/SYSDBA/client-key.pem:               #设置私钥密码,本次测试设置为dameng
Verifying - Enter pass phrase for client_ssl/SYSDBA/client-key.pem:  #再输入一次

复制

2、生成证书签发申请

[root@localhost ca]# 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"
Enter pass phrase for client_ssl/SYSDBA/client-key.pem:  #输入上一步生成私钥文件时设置的密码

复制

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

[root@localhost ca]# openssl ca -days 365 -in client_ssl/SYSDBA/client.csr -out client_ssl/SYSDBA/client-cert.pem
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /opt/ca/ca-key.pem:         #输入设置的CA私钥存储密码
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 2 (0x2)
        Validity
            Not Before: Aug 11 09:39:23 2021 GMT
            Not After : Aug 11 09:39:23 2022 GMT
        Subject:
            countryName               = cn
            stateOrProvinceName       = hunan
            organizationName          = dameng
            organizationalUnitName    = dev
            commonName                = SYSDBA
            emailAddress              = dmclient@dm.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                E1:BB:5E:A0:E6:7C:38:40:FD:BB:6B:B8:2E:6E:2C:46:1C:E3:AF:1C
            X509v3 Authority Key Identifier: 
                keyid:61:05:BE:3F:A9:DE:2D:9A:7F:2A:BA:0E:45:97:47:5B:E8:0C:D7:7E

Certificate is to be certified until Aug 11 09:39:23 2022 GMT (365 days)
Sign the certificate? [y/n]:y                #输入y


1 out of 1 certificate requests certified, commit? [y/n]y        #输入y
Write out database with 1 new entries
Data Base Updated

复制

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

[root@localhost ca]# openssl pkcs12 -export -inkey client_ssl/SYSDBA/client-key.pem -in client_ssl/SYSDBA/client-cert.pem -out client_ssl/SYSDBA/client-pkcs.p12
Enter pass phrase for client_ssl/SYSDBA/client-key.pem:    #输入之前设置的客户端私钥存储密码(dameng)
Enter Export Password:            #设置export password,本次测试设置为abc123
Verifying - Enter Export Password: #再输入一次

复制

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

[root@localhost ca]# keytool -import -alias ca -trustcacerts -file ca-cert.pem -keystore client_ssl/SYSDBA/.keystore -deststorepass abc123 -noprompt
证书已添加到密钥库中
[root@localhost ca]# keytool -import -alias server -trustcacerts -file server_ssl/server.cer -keystore client_ssl/SYSDBA/.keystore -deststorepass abc123 -noprompt
证书已添加到密钥库中
[root@localhost ca]# keytool -importkeystore -srckeystore client_ssl/SYSDBA/client-pkcs.p12 -srcstorepass abc123  -srcstoretype PKCS12 -keystore client_ssl/SYSDBA/.keystore  -deststorepass abc123
正在将密钥库 client_ssl/SYSDBA/client-pkcs.p12 导入到 client_ssl/SYSDBA/.keystore...
已成功导入别名 1 的条目。
已完成导入命令: 1 个条目成功导入, 0 个条目失败或取消

复制

导入所有证书到keystore文件,并设置keystore文件密码为export password(-deststorepass)
执行警告(会出现警告可以不用管):

[root@localhost ca]# keytool -importkeystore -srckeystore client_ssl/SYSDBA/.keystore -destkeystore client_ssl/SYSDBA/.keystore -deststoretype pkcs12
输入源密钥库口令:           #输入之前的export password,abc123
已成功导入别名 ca 的条目。
已成功导入别名 1 的条目。
已成功导入别名 server 的条目。
已完成导入命令: 3 个条目成功导入, 0 个条目失败或取消

复制

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

[root@localhost ca]# cp ca-cert.pem client_ssl/SYSDBA/
[root@localhost ca]# ls -la client_ssl/SYSDBA/     #查看是否成功

复制

六、部署SERVER端证书

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

[root@localhost bin]# mv server_ssl server_ssl_bak2
[root@localhost bin]# cp /opt/ca/server_ssl ./ -r
[root@localhost bin]# chmod -R 777 server_ssl

复制

七、部署client端证书

将/opt/ca/client_ssl整个目录拷贝到客户端机器上。如果是Linux机器,需要注意目录权限,可以将整个目录设置为777权限。

chmod 777 -R client_ssl

复制

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

是否使用通信加密以DM数据库服务器端的设置为准,即通过设置服务器配置文件dm.ini中的ENABLE_ENCRYPT和COMM_ENCRYPT_NAME参数来指定,客户端以服务器采用的通信方式与其进行通信。
参数解释:
ENABLE_ENCRYPT:取值0、1和2分别代表不加密、SSL/TLS加密、SSL/TLS认证,默认值为1。
0:不加密;
1:SSL/TLS加密,此时如果没有配置好SSL/TLS环境,则通讯仍旧不加密;
2:SSL/TLS认证,不加密,此时如果服务器SSL/TLS环境没有配置则服务器无法正常启动,如果客户端SSL环境没有配置则无法连接服务器;

SQL> SF_SET_SYSTEM_PARA_VALUE('ENABLE_ENCRYPT',2,1,2);     --启用SSL/TLS认证
SQL> SF_SET_SYSTEM_PARA_VALUE('COMM_ENCRYPT_NAME','RC4',1,2); --启用SSL/TLS通信加密,并指定加密算法为'RC4'
SQL> select * from v$parameter where name like '%ENABLE_ENCRYPT%' or name like '%COMM_ENCRYPT_NAME%'  --验证相关配置是否生效

复制

九、重启数据库并进行登录测试

1、重启数据库

[dmdba@localhost bin]#./DmServiceDMSERVER restart

复制

2、登录测试

[dmdba@localhost bin]#./disql SYSDBA/SYSDBA@localhost:5236#"{SSL_PATH=/opt/ca/client_ssl/SYSDBA,SSL_PWD=Dameng123}"
服务器[localhost:5236]:处于普通打开状态
登录使用时间 : 42.413(ms)
disql V8

复制

评论
后发表回复
杨永健
请介绍一下这个功能,在性能上的损耗情况。
发布于 2024/07/25 01:22

作者

文章

阅读量

获赞

扫一扫
联系客服