通信加密

DM 提供两种通信加密方式:一基于传输层的 SSL 协议加密;二基于应用层的消息包加密。两个层次的加密互不影响,可以同时使用。因为任何一种加密方式都足够安全,而且双重加密会占用更多的数据库资源,所以通常情况下,没必要同时开启这两种加密。

当未采用通信加密时,为了提高安全性,数据库系统自动对登录消息中的用户名密码使用内部算法进行了简单的加解密操作,如果用户需要对用户名密码进行增强加密,请参考 11 登录用户名密码增强加密

下面对基于传输层的 SSL 协议加密和基于应用层的消息包加密进行详细介绍。

6.1 基于传输层的 SSL 协议加密

选择是否使用 SSL 协议加密以 DM 数据库服务器端的设置为准,即通过设置服务器配置文件 DM.INI 中的 ENABLE_ENCRYPT 参数来指定,客户端以服务器采用的通信方式与其进行通信。

ENABLE_ENCRYPT 取值 0、1、2 或 4。0:不开启 SSL 加密和 SSL 认证;1:开启 SSL 加密和 SSL 认证;2:开启 SSL 认证但不开启 SSL 加密;4:开启 SSL 加密不开启 SSL 认证。缺省值为 0。不论设置为 1、2 或 4,它内部所使用的密码套件是 SSL 协议自动协商的,达梦未进行任何干涉。

系统管理员可通过查询 V$PARAMETER 动态视图查询 ENABLE_ENCRYPT 的当前值。

SELECT * FROM V$PARAMETER WHERE NAME='ENABLE_ENCRYPT';

也可以通过使用客户端工具 Console 或调用系统过程 SP_SET_PARA_VALUE 重新设置 ENABLE_ENCRYPT 的值。不过由于这个参数都为静态 INI 参数,修改后需要重启 DM 数据库服务器才能生效。

SP_SET_PARA_VALUE (2,'ENABLE_ENCRYPT',1);

另外,DM.INI 中的 MIN_SSL_VERSION 参数指定了允许连接的 SSL 最低版本,此参数设置仅当 ENABLE_ENCRYPT 不为 0 时有效。MIN_SSL_VERSION 的可取值包括:

  • 0:所有版本
  • 0x0301:TLSv1
  • 0x0302:TLSv1.1
  • 0x0303:TLSv1.2
  • 0x0304:TLSv1.3

MIN_SSL_VERSION 缺省为 0,为静态 INI 参数,修改后需要重启 DM 数据库服务器才能生效。

当选择仅 SSL 加密时,不需要提供证书。当选择 SSL 加密和认证时,需要在 DM 数据库服务器所在目录下的 server_ssl 子目录中存放 CA 的证书、服务器的证书和服务器的密钥,同时在客户端所在目录下的 client_ssl 子目录中存放 CA 的证书、客户端的证书和客户端的密钥,这样服务器和客户端的通信即是建立在加密的 SSL 连接之上的。此时如果没有配置好 SSL 环境,则通讯仍旧不加密。

当选择 SSL 认证时,不进行通信加密,只是检查客户端和服务器的证书是否匹配。此时如果服务器 SSL 环境没有配置则服务器无法正常启动,如果客户端 SSL 环境没有配置则无法连接服务器。

6.2 基于应用层的消息包加密

选择是否使用基于应用层的消息包加密以 DM 数据库服务器端的设置为准,即通过设置服务器配置文件 DM.INI 中的 COMM_ENCRYPT_NAME 参数来指定,客户端以服务器采用的通信方式与其进行通信。

COMM_ENCRYPT_NAME 取值空串、算法名分别代表不加密、加密。缺省为空串。算法名可以通过查询动态视图 V$CIPHERS 获取。本节的算法名必须为分组加密算法或流加密算法(即 CYT_TYPE 为 1 或 2),且不为非填充模式(即 WORK_MODE 不能是 ECB_NOPAD 或 CBC_NOPAD)。当算法名写错,则使用加密算法 DES_CFB。应用层加密的密钥是通过 DH 密钥交换算法协商生成。

用户可通过 V$CIPHERS 动态视图查询达梦支持的 COMM_ENCRYPT_NAME 算法名。

SELECT CYT_NAME FROM V$CIPHERS WHERE (CYT_TYPE=1 OR CYT_TYPE=2 ) AND (WORK_MODE!='ECB_NOPAD' AND WORK_MODE!='CBC_NOPAD');

用户可通过 V$PARAMETER 动态视图查询 COMM_ENCRYPT_NAME 的当前值。

SELECT * FROM V$PARAMETER WHERE NAME='COMM_ENCRYPT_NAME';

也可以通过使用客户端工具 Console 或调用系统过程 SP_SET_PARA_STRING_VALUE 重新设置 COMM_ENCRYPT_NAME 的值。不过由于这个参数都为静态 INI 参数,修改后需要重启 DM 数据库服务器才能生效。

SP_SET_PARA_STRING_VALUE(2,'COMM_ENCRYPT_NAME','DES_OFB');
微信扫码
分享文档
扫一扫
联系客服