DM8的TLS加密认证配置相关

1.为什么要使用SSL/TLS数字证书?

  安装了SSL/TLS证书之后,可以保证客户端到服务器端之间的安全通信,数字证书采用非对称加密方式。虽然经过对称加密方式后的数据也无法被破译,但在使用了数字证书后,可以在通信过程建立时除校验普通的用户名、密码额外增加一个数字证书的认证过程使得用户登录的安全性实现双保险,没有匹配的数字证书,即使知道了相应的用户名和密码也无法成功登陆。

  虽然采用数字证书方式登录具有极好的安全性,但事物总是具有两面性,绝大部分商用数字证书都是收费的。采用何种方式由客户端应用程序决定。如果项目涉密要求高,需要进行数字证书方式加密,则可以进行相关配置实现,本文主要就DM8的SSL/TLS相关配置进行说明。

2.名词解释

  在开始实验之前,我们先了解几个概念:

2.1 SSL安全套接层

  安全套接层(Secure Socket Layer,SSL )是一种在两台机器之间提供安全通道的协议。它具有保护传输数据以及识别通信机器的功能。安全通道是透明的,意思就是说它对传输的数据不加变更。客户与服务器之间的数据是经过加密的,一端写入的数据完全是另一端读取的内容,并具有。透明性使得几乎所有基于TCP 的协议稍加改动就可以在SSL 上运行,非常方便。

2.2 TLS(Transport Layer Security)安全传输层协议

  TLS(Transport Layer Security)安全传输层协议,用于在两个通信应用程序之间提供保密性和数据完整性。该标准协议是由IETF于1999年颁布,整体来说TLS非常类似SSLv3,只是对SSLv3做了些增加和修改。

2.3 CA数字认证中心

  CA,即Certificate Authority,数字证书中心。是指具备一定资质条件的数字证书签发机构,包含根密钥和根证书, 其核心功能就是通过根密钥和根证书并使用一定的算法来”签发”和”管理”数字证书。

2.4 数字证书

  数字证书其作用类似于现实生活中司机的驾驶执照或日常生活中的身份证,通常是由相关的CA进行签发,安全性可以得到绝对可靠。通常情况下,数字证书中一般包含公钥并由CA对其进行数字签名,证书的作用也主要是用来证明公钥的真实性与合法性。

2.5 非对称加/解密

  非对称加/解密,是指加/解密使用不同的密钥的方式。做法是将一些摘要信息通过数学算法,生成两串数字串。这两串字符串在密码学中通常被称为两把密钥,一把公钥和一把私钥。通过其中任意一把密钥,可以校验另外一把密钥的真实性,由此可以进行加密的认证。例如,通过私钥加密的信息,只能由对应的公钥才能进行解密,而不能通过私钥或其他的密钥进行解密。通常情况下,公钥用于传输,在传输过程中为了保证不被篡改需要由CA对其颁发证书并与作为数字证书的一部分一起传输,私钥不对外暴露。

2.6 对称加/解密

  对称加密是指使用相同的密钥的加/解密方式,经过加密的数据信息同样无法被破译,但由于只有一把密钥,没有双向加密认证的功能。

2.7 常见的数字证书种类

  通常证书有两种,一种是介质版的,它有一个像U盘、U盾一样的介质,用户使用时需要将介质插到电脑上。另一种则是文件版的,用户的秘钥和数字证书都存在操作系统文件中,使用时调取就可以了。

2.8 数字签名

  数字签名通常是由信息的发送者通过个人的私钥产生的别人无法伪造的一段数字串,相当于真实生活中的个人签字,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。

3.实验环境

操作系统kylin v10 linux
虚拟机型号vmware15.5
cpu类型x86
ssl软件版本OpenSSL 1.1.1f
数字证书介质类型本地文件
数字证书算法aes256
通信加密算法RC4

4.实验过程

4.1 检查操作系统自带的openssl版本

[root@localhost ~]# openssl version
OpenSSL 1.1.1f 31 Mar 2020

4.2 修改openssl配置文件

vi /etc/pki/tls/openssl.cnf[ 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
x509_extensions = usr_cert # The extensions to add to the cert

4.3 根据配置文件的参数,建立相关目录

[root@localhost ~]# mkdir -p /opt/ca --ca主目录
[root@localhost ~]# mkdir -p /opt/ca/certs --ca证书存放目录
[root@localhost ~]# mkdir -p /opt/ca/crl --吊销证书存放目录
[root@localhost ~]# mkdir -p /opt/ca/newcerts --新颁发证书存放目录
[root@localhost ~]# echo "01" > /opt/ca/serial --生成CA的序列号
[root@localhost ~]# touch /opt/ca/index.txt --ca的数据字典
[root@localhost ~]# mkdir /opt/ca/server_ssl --server端密钥和证书存放目录
[root@localhost ~]# mkdir /opt/ca/client_ssl --client端密钥和证书存放目录
[root@localhost ~]# mkdir -p /opt/ca/client_ssl/SYSDBA --SYSDBA用户密钥和证书存放目录
[root@localhost ~]# cd /opt/ca/

4.4 建立CA,并生成CA私钥和根证书

  正常情况下,生产环境应该通过专门的安全产品建立CA。但由于是实验环境,就只在本地虚拟机服务器进行建立,重点是模拟相关过程。
  CA中心的核心组件中包括CA的密钥和根证书,其中CA私钥用于数字签名,包含公钥的根证书来验证密钥的合法性。后续所有的密钥和证书都需要此步骤建立的CA中心进行签发和管理。参数解释:-new指定为新生成,-x509指定证书格式为国际标准格式,-days参数指定证书的有效期(单位为天),-subj参数需要匹配操作人员个人及所在单位/组织的真实信息。其他的参数,可以通过openssl --help进行获取。

[root@localhost ca]# openssl req -new -x509 -days 3650 -keyout ca-key.pem -out ca-cert.pem -subj "/C=cn/ST=jilin/L=changchun/O=dameng/OU=FAE/CN=lw/emailAddress=yc@dm.com"
Generating a RSA private key
........+++++
...............................................+++++
writing new private key to 'ca-key.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
[root@localhost ca]# cp ca-cert.pem cacert.pem
[root@localhost ca]# cp ca-key.pem private/cakey.pem
[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)

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

  此步骤就是生成server端的私钥,并应用CA私钥对包含server端公钥的证书进行数字签名。

[root@localhost ca]# openssl req -new -key server_ssl/server-key.pem -out server_ssl/server.csr -subj "/C=cn/ST=jilin/L=changchun/O=dameng/OU=FAE/CN=server/emailAddress=server@dm.com"
[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/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Dec 27 15:28:21 2022 GMT
Not After : Dec 24 15:28:21 2032 GMT
Subject:
countryName = cn
stateOrProvinceName = jilin
organizationName = dameng
organizationalUnitName = FAE
commonName = server
emailAddress = server@dm.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
D5:F0:86:9F:AA:98:20:4C:1B:FC:0C:DA:91:5F:38:E2:06:02:9C:03
X509v3 Authority Key Identifier:
keyid:C1:60:61:D5:E8:82:4E:FD:BF:DB:EC:3A:A7:09:62:71:A9:96:DD:58

Certificate is to be certified until Dec 24 15:28:21 2032 GMT (3650 days)
Sign the certificate? [y/n]:y


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

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

  此步骤就是生成client端的私钥,并应用CA私钥对包含client端公钥的证书进行数字签名。

[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:
Verifying - Enter pass phrase for client_ssl/SYSDBA/client-key.pem:

[root@localhost ca]# openssl req -new -key client_ssl/SYSDBA/client-key.pem -out client_ssl/SYSDBA/client.csr -subj "/C=cn/ST=jilin/L=changchun/O=dameng/OU=FAE/CN=SYSDBA/emailAddress=client@dm.com"
Enter pass phrase for client_ssl/SYSDBA/client-key.pem:

[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/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 2 (0x2)
Validity
Not Before: Dec 27 15:35:44 2022 GMT
Not After : Dec 27 15:35:44 2023 GMT
Subject:
countryName = cn
stateOrProvinceName = jilin
organizationName = dameng
organizationalUnitName = FAE
commonName = SYSDBA
emailAddress = client@dm.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
7F:BE:6A:2D:15:98:4A:42:DF:FE:54:E8:6D:2B:EB:69:7F:3C:C6:C8
X509v3 Authority Key Identifier:
keyid:C1:60:61:D5:E8:82:4E:FD:BF:DB:EC:3A:A7:09:62:71:A9:96:DD:58

Certificate is to be certified until Dec 27 15:35:44 2023 GMT (365 days)
Sign the certificate? [y/n]:y


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

[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:
Enter Export Password:
Verifying - Enter Export Password:

4.7 JDBC接口连接的情况,需要生成keystore格式文件

  上述过程就已经完成了server端和client端的SSL/TLS通信必备要素,下面的操作则是将上述生成的密钥和证书转换为keystore格式,用以JDBC接口通信使用。本文主要阐述SSL通信的原理和实现方法,对于JDBC接口不进行阐述,有兴趣可以参考《DM JDBC 编程指南》进行相关实验。

[root@localhost ca]# keytool -import -alias ca -trustcacerts -file ca-cert.pem -keystore client_ssl/SYSDBA/.keystore -deststorepass Dameng123 -noprompt
证书已添加到密钥库中
[root@localhost ca]# openssl x509 -in server_ssl/server-cert.pem -out server_ssl/server.cer
[root@localhost ca]# keytool -import -alias server -trustcacerts -file server_ssl/server.cer -keystore client_ssl/SYSDBA/.keystore -deststorepass Dameng123 -noprompt
证书已添加到密钥库中

[root@localhost ca]# keytool -importkeystore -srckeystore client_ssl/SYSDBA/client-pkcs.p12 -srcstorepass Dameng123 -srcstoretype PKCS12 -keystore client_ssl/SYSDBA/.keystore -deststorepass Dameng123
正在将密钥库 client_ssl/SYSDBA/client-pkcs.p12 导入到 client_ssl/SYSDBA/.keystore...
已成功导入别名 1 的条目。
已完成导入命令: 1 个条目成功导入, 0 个条目失败或取消

Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore client_ssl/SYSDBA/.keystore -destkeystore client_ssl/SYSDBA/.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。

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

Warning:
已将 "client_ssl/SYSDBA/.keystore" 迁移到 Non JKS/JCEKS。将 JKS 密钥库作为 "client_ssl/SYSDBA/.keystore.old" 进行了备份。

4.8 将服务端和客户端的相关文件替换到相应目录(root用户执行)

cd /home/dmdba/dmdbms/bin
mv server_ssl server_ssl_bak --DM8的server端密钥和证书存放在$DM_HOME/bin/server_ssl
cd /opt/ca
cp /opt/ca/ca-* /opt/ca/server_ssl --将ca根证书复制到server端的数字证书目录
chmod 777 /opt/ca/server_ssl
cp /opt/ca/ca-* /opt/ca/client_ssl --将ca根证书复制到client端的数字证书目录
chmod 777 /opt/ca/client_ssl --客户端的密钥和证书可以根据实际情况进行配置
cp /opt/ca/server_ssl ./ -r

4.9 启用SSL/TLS认证和通信加密

  是否使用通信加密以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%'--验证相关配置是否生效

注意:DM8支持的加密算法可以通过以下SQL语句查询获取

SELECT * FROM SYS.“V$CIPHERS;

4.10 重启数据库服务并进行连接测试

4.10.1 没有配置加密认证时的操作

  新建一台虚拟机安装数据库软件并完成试验机一样的初始化参数,root用户执行以下命令,对数据库实例端口5236开启抓包,抓包文件设置为5236.pcap:

cd /root
tcpdump -nn -i any -s 0 -vv port 5236 -w 5236.pcap

  重启数据库服务,使用disql并使用用户名、密码方式登录,并执行一条SQL查询,结果集可以正常被解析:

cd /home/dmdba/dmdbms/bin
./DmServicedmserver restart
./disql SYSDBA/Dameng789:5236
SQL> SELECT * FROM V$PARAMETER WHERE NAME='ENABLE_ENCRYPT' OR NAME='COMM_ENCRYPT_NAME';

行号 ID NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- ----------- ----------------- ------- ----- --------- ----------
DESCRIPTION DEFAULT_VALUE ISDEFAULT
----------------------------------------------------------------------------------------------- ------------- -----------
1 465 ENABLE_ENCRYPT IN FILE 2 2 2
Encrypt Mode For Communication, 0: Without Encryption; 1: SSL Encryption; 2: SSL Authentication 0 0

2 487 COMM_ENCRYPT_NAME IN FILE RC4 RC4 RC4
Communication encrypt name, if it is null then the communication is not encrypted NULL 1

4.10.2 配置过加密认证时的操作

  CA根证书在此时就出现了作用,配置了加密后,由于client端的数字证书由CA私钥进行过了数字签名,此时server端会利用CA的根证书中的CA公钥信息进行验签,来验证client证书的真伪。同时server端的数字证书也由CA私钥进行过了数字签名,client也可以使用CA根证书进行验签。可以说,CA根证书就是在整个认证过程中,作为仲裁者,确认服务端和客户端的真实身份。

  root用户执行以下命令,对数据库实例端口5236开启抓包:

cd /root
tcpdump -nn -i any -s 0 -vv port 5236 -w 5236_ssl.pcap

  重启数据库服务,使用disql并采用TLS证书配合用户名、密码的方式登录,并执行一条SQL,结果集可以被正常解析:

cd /home/dmdba/dmdbms/bin
./DmServicedmserver restart
./disql SYSDBA/Dameng789:5236#"{SSL_PATH=/opt/ca/client_ssl/SYSDBA,SSL_PWD=Dameng123}"
SQL> SELECT * FROM V$PARAMETER WHERE NAME='ENABLE_ENCRYPT' OR NAME='COMM_ENCRYPT_NAME';

行号 ID NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- ----------- ----------------- ------- ----- --------- ----------
DESCRIPTION DEFAULT_VALUE ISDEFAULT
----------------------------------------------------------------------------------------------- ------------- -----------
1 465 ENABLE_ENCRYPT IN FILE 2 2 2
Encrypt Mode For Communication, 0: Without Encryption; 1: SSL Encryption; 2: SSL Authentication 0 0

2 487 COMM_ENCRYPT_NAME IN FILE RC4 RC4 RC4
Communication encrypt name, if it is null then the communication is not encrypted NULL 1

5.对比解析抓包文件

5.1 分析开启加密认证前的抓包

  经过4.10步骤的操作,说明开启加密认证和通信加密的前后,数据库都可以正常使用,但这只是功能验证,通信过程又是怎样的呢?下面就将两个过程的抓包文件进行分析,看看通信过程中,两个过程有什么不同。

  使用wireshark打开抓包文件,过滤TLS协议,没有任何数据包,说明没有开启TLS认证。
在这里插入图片描述
  遍历通信报文,在通信过程中可以看到有客户端程序发送到数据库的明文SQL查询语句。
在这里插入图片描述

5.2 分析开启加密认证后的抓包

  使用wireshark打开抓包文件,可以看到用户登录时有TLS验证过程,并且没有任何显示明文的用户信息,说明TLS认证功能设置成功。
在这里插入图片描述
  遍历报文,没有发现明文传输的SQL查询语句,说明通信过程已经被加密。
在这里插入图片描述

5.2 总结

  DM8数据库在进行了相关加密认证配置后,通过建立TLS认证和非对称加密,整个客户端登陆和数据库操作变得更加安全。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值