首页 > 数据库 > > 设置数据库连接-用SSL进行安全的TCP/IP连接
为了保护敏感数据在Internet上传输的安全性,GaussDB 100支持通过SSL加密客户端和服务器之间的通讯。
从CA认证中心申请到正式的服务器、客户端的证书和密钥。当前只支持pem格式的SSL证书。(假设服务器的私钥为server.key,证书为server.crt,客户端的私钥为client.key,证书为client.crt,CA根证书名称为cacert.pem。)
GaussDB 100支持SSL协议标准,SSL协议是一种安全性更高的协议标准,它加入了数字签名和数字证书来实现客户端和服务器的双向身份验证,保证了通信双方更加安全的数据传输。
GaussDB 100支持TLSv1.2协议标准,TLSv1.2协议是一种安全性更高的协议标准,他加入了数字签名和数字证书来实现客户端和服务器的双向身份验证,保证了通信双方更加安全的数据传输。
GaussDB 100支持TLSv1.3协议标准,TLSv1.3协议是在TLSv1.2版本基础上进行的升级和改造。相比于之前的版本,TLSv1.3协议具有更快的访问速度和更高的安全性。
该配置只针对本节点生效,不能分发到其他节点,因此需要在分布式数据库的各个节点分别开启SSL功能。
假设以“/gaussdb/data/data_cn”路径为例,在实际操作中请使用实际路径进行替换。
zsql
conn omm/gaussdb_123@192.168.0.1:8000
omm/gaussdb_123为安装后创建的系统管理员和其默认密码,192.168.0.1为CN所在的服务器IP地址,8000为连接的端口号。
alter system set SSL_CA = '/gaussdb/data/data_cn/cacert.pem';
alter system set SSL_CERT = '/gaussdb/data/data_cn/server.crt';
alter system set SSL_KEY = '/gaussdb/data/data_cn/server.key';
alter system set SSL_VERIFY_PEER = TRUE;
export ZSQL_SSL_CERT="/gaussdb/data/data_cn/client.crt"
export ZSQL_SSL_KEY="/gaussdb/data/data_cn/client.key"
export ZSQL_SSL_CA="/gaussdb/data/data_cn/cacert.pem"
export ZSQL_SSL_MODE="preferred"

认证方式 | 含义 | 配置服务器端参数 | 配置客户端环境变量 | 维护建议 |
|---|---|---|---|---|
双向认证(推荐) | 客户端验证服务器证书的有效性,同时服务器端也要验证客户端证书的有效性,只有认证成功,连接才能建立。 | 将服务器证书、服务器私钥、废弃证书和根证书拷贝到$GAUSSHOME下,并设置如下参数:
| 设置如下环境变量:
| 该方式应用于安全性要求较高的场景。使用此方式时,建议设置客户端的ZSQL_SSL_MODE变量为VERIFY_CA或VERIFY_FULL,服务器端的认证方式设定为SSL_VERIFY_PEER=TRUE,这样只有某些授权的客户端和服务器才能使用GaussDB 100服务器进行数据通信,确保了网络数据的安全性。如果设置SSL_VERIFY_PEER=FALSE,表示允许客户端不提供设备证书创建SSL连接,不推荐使用。 |
单向认证 | 客户端只验证服务器证书的有效性,而服务器端不验证客户端证书的有效性。服务器加载证书信息并发送给客户端,客户端使用根证书来验证服务器端证书的有效性。 | 将服务器端证书和私钥文件拷贝到$GAUSSHOME下,并设置如下参数:
| 设置如下环境变量:
| 为防止基于TCP链接的欺骗,建议使用SSL证书认证功能。除配置服务器证书和私钥文件外,建议客户端使用ZSQL_SSL_MODE变量为VERIFY_CA或VERIFY_FULL方式连接。 |
cd /gaussdb/data/data_cn/
chown omm:dbgrp server.crt server.key cacert.pem
chmod 600 server.crt server.key cacert.pemsu - omm
zencrypt -e aes256 -f jQ4IAgxiJR1ezCPrvtZLUQ== -k
8Vw4Gm2Ktu7B8XIzTlVRK9EOH+lpSNbIlhfVbaJ0RDdbgyUyHsYT6UxYGSEbZg7BXki6gSP8slEU8haWxiUgNg==--输入私钥证书的显示密码(以Aa123456为例),生成密码加密密文。
Please enter password to encrypt:
********
Please input password again:
********
Cipher: PLFJgfZwLSOJFRp6o7qsj604fFwPEu2MLxH7m/F/aMg=
alter system set SSL_KEY_PASSWORD = 'PLFJgfZwLSOJFRp6o7qsj604fFwPEu2MLxH7m/F/aMg=';
gs_om -t stop
如果需要配置环境变量,则需要重启daemon进程,原因是daemon是父进程,后续拉起的agent,下发的shell命令都是继承daemon的环境变量。
如果要重启daemon进程,可以kill -9 +PID,这里有crontab任务会定时拉起daemon进程,需等待所有集群环境上的daemon进程被拉起后(大约1分钟),再执行以下操作。

输入“ps ux| grep daemon”命令,即可查看daemon进程是否被拉起。输出结果包含“/data/gaussdb/app/zcluster/cm/daemon ”字样,表示进程已经被拉起。
gs_om -t start
参考操作步骤中配置服务端SSL相关参数,重启数据库之后会校验相关参数和证书有效性,校验成功之后会自动开启SSL功能。
检查SSL功能是否开启,可以用zsql工具以omm用户连接到服务器,执行“show parameter HAVE_SSL”命令,查询SSL状态,如果HAVE_SSL参数的RUNTIME_VALUE字段值为TRUE,则表明SSL开启成功,否则查看服务器运行日志文件,检查SSL开启失败原因。
SQL> SHOW PARAMETER HAVE_SSL
NAME DATATYPE VALUE RUNTIME_VALUE EFFECTIVE
---------------------------------------------------------------- -------------------- ---------------------------------------------------------------- -------------------- --------------------
HAVE_SSL GS_TYPE_BOOLEAN FALSE TRUE reboot方式一:数据库实例运行时,更改SSL_CA、SSL_CERT、SSL_KEY和SSL_KEY_PASSWORD等参数,设置为空值,然后重启数据库,可以关闭服务端SSL功能。
alter system set SSL_CA = '';
alter system set SSL_CERT = '';
alter system set SSL_KEY = '';
alter system set SSL_KEY_PASSWORD = '';方式二:删除配置文件中SSL相关参数,或者删除磁盘上的SSL证书,然后重启数据库也可以关闭SSL功能。
在GaussDB 100服务器端的zengine.ini文件中配置相关参数,详细信息请参见表2。
参数 | 描述 | 取值范围 |
|---|---|---|
SSL_VERIFY_PEER | 表示是否允许无证书客户端建立SSL连接。该参数需要和SSL_CA配合使用,配置SSL_CA时,会请求客户端证书,如果客户端未提供证书,则根据SSL_VERIFY_PEER参数决定是否拒绝连接。 |
默认值:FALSE,表示允许无证书客户端建立SSL连接。 |
SSL_CERT | 指定服务器证书文件,包含服务器端的公钥。服务器证书用以表明服务器身份的合法性,公钥将发送给对端用来对数据进行加密。 | 请以实际的证书名为准。建议设置为设备证书的绝对路径,否则可能导致证书加载失败。 默认值:空,表示没有设备证书。 |
SSL_KEY | 指定服务器私钥文件,用以数字签名和对公钥加密的数据进行解密。 | 请以实际的服务器私钥名称为准。建议设置为私钥文件的绝对路径,否则可能导致私钥加载失败。 默认值:空,表示没有私钥。 |
SSL_CA | CA服务器的根证书。此参数可选择配置,需要验证客户端证书的合法性时才需要配置。 | 请以实际的CA服务器根证书名称为准。建立设置为CA证书的绝对路径,否则可能导致证书加载失败。 默认值:空,表示不对客户端的身份进行校验。 说明:CA证书要求是X.509V3数字证书,且“基本限制”扩展域标明为“CA”,“密钥用法”扩展域包含“证书签名”,如果该CA证书还用于证书吊销,“密钥用法”扩展域还要包含“吊销签名”。 |
SSL_CRL | 证书吊销列表,如果客户端证书在该列表中,则当前客户端证书被视为无效证书。 | 请以实际的证书吊销列表名称为准。建议设置为吊销证书的绝对路径,否则可能导致证书加载失败。 默认值:空,表示没有吊销列表。 |
SSL_CIPHER | SSL通讯使用的加密算法。 | GaussDB 100支持的加密算法的详细信息请参见表4。 默认值:空,表示允许对端使用GaussDB 100支持的所有加密算法,最后满足条件的算法按照安全强度进行排序。 |
SSL_KEY_PASSWORD | 服务器私钥密码密文,如果私钥加密存储,通过该参数设置密文。 | 请以实际加密密文为准。 默认值:空,表示私钥文件没有加密。 |
SSL_EXPIRE_ALERT_THRESHOLD | SSL证书过期告警阈值,若启用SSL,在过期时间小于此阈值的时候会有日志提醒。数据库启动后会周期性(7天)检查SSL证书过期情况。 | 取值范围[7-180]。 默认值:30,单位:天 |
在GaussDB 100客户端配置SSL认证相关的环境变量,详细信息请参见表3。

客户端环境变量的路径以“/gaussdb/data/data_cn”为例,在实际操作中请使用实际路径进行替换。
环境变量 | 描述 | 取值范围 |
|---|---|---|
ZSQL_SSL_CERT | 指定客户端证书文件,包含客户端的公钥。客户端证书用以表明客户端身份的合法性,公钥将发送给对端用来对数据进行加密。 | 必须包含文件的绝对路径,如: 复制 export ZSQL_SSL_CERT='/gaussdb/data/xxx/client.crt' 默认值:空 |
ZSQL_SSL_KEY | 指定客户端私钥文件,用以数字签名和对公钥加密的数据进行解密。 | 必须包含文件的绝对路径,如: 复制 export ZSQL_SSL_KEY='/gaussdb/data/xxx/client.key' 默认值:空 |
ZSQL_SSL_MODE | 设置是否和服务器进行SSL连接协商,以及指定SSL连接的优先级。 | 取值及含义:
默认值:preferred |
ZSQL_SSL_CA | 指定为客户端颁发证书的根证书文件,根证书用于验证服务器证书的有效性。 | 必须包含文件的绝对路径,如: 复制 export ZSQL_SSL_CA='/gaussdb/data/xxx/root.crt' 默认值:空 |
ZSQL_SSL_CRL | 指定证书吊销列表文件,用于验证服务器证书是否在废弃证书列表中,如果在,则服务器证书将会被视为无效证书。 | 必须包含文件的绝对路径,如: 复制 export ZSQL_SSL_CRL='/gaussdb/data/xxx/root.crl' 默认值:空 |
ZSQL_SSL_CIPHER | SSL通讯使用的加密算法。 | GaussDB 100支持的加密算法的详细信息请参见表4。 默认值:空,表示允许对端使用GaussDB 100支持的所有加密算法,最后满足条件的算法按照安全强度进行排序。 |
ZSQL_SSL_KEY_PASSWD | 客户端私钥密码密文,如果私钥加密存储,通过该参数设置密文。 | 请以实际加密密文为准。 默认值:空,表示私钥文件没有加密。 |
GaussDB 100 SSL传输支持一系列不同强度的加密和认证算法。用户可以通过修改zengine.ini中的SSL_CIPHER参数指定数据库服务器使用的加密算法。目前GaussDB 100 SSL支持的加密算法如表4所示。
加密强度 | 安全程度 | 加密算法描述 | 支持版本 | 说明 |
|---|---|---|---|---|
stronger | high | DHE-RSA-AES256-GCM-SHA384 | TLS1.2及其以下版本 | 适用于RSA加密算法生成的证书 |
stronger | high | DHE-RSA-AES128-GCM-SHA256 | TLS1.2及其以下版本 | |
stronger | high | ECDHE-ECDSA-AES256-GCM-SHA384 | TLS1.2及其以下版本 | 适用于ECDSA加密算法生成证书 |
stronger | high | ECDHE-ECDSA-AES128-GCM-SHA256 | TLS1.2及其以下版本 | |
stronger | high | ECDHE-RSA-AES256-GCM-SHA384 | TLS1.2及其以下版本 | 适用于RSA加密算法生成的证书 |
stronger | high | ECDHE-RSA-AES128-GCM-SHA256 | TLS1.2及其以下版本 | |
stronger | high | DHE-DSS-AES256-GCM-SHA384 | TLS1.2及其以下版本 | 适用于DSA加密算法生成的证书 |
stronger | high | DHE-DSS-AES128-GCM-SHA256 | TLS1.2及其以下版本 | |
stronger | medium | DHE-RSA-AES256-SHA256 | TLS1.2及其以下版本 | 适用于RSA加密算法生成的证书 |
stronger | medium | DHE-RSA-AES128-SHA256 | TLS1.2及其以下版本 | |
stronger | medium | DHE-DSS-AES256-SHA256 | TLS1.2及其以下版本 | 适用于DSA加密算法生成的证书 |
stronger | medium | DHE-DSS-AES128-SHA256 | TLS1.2及其以下版本 | |
stronger | high | DHE-RSA-AES256-CCM | TLS1.2及其以下版本 | 适用于RSA加密算法生成的证书 |
stronger | high | DHE-RSA-AES128-CCM | TLS1.2及其以下版本 | |
stronger | high | TLS_AES_256_GCM_SHA384 | TLS1.3 | 适用于RSA或者ECDSA加密算法生成的证书 |
stronger | high | TLS_CHACHA20_POLY1305_SHA256 | TLS1.3 | 适用于RSA或者ECDSA加密算法生成的证书 |
stronger | high | TLS_AES_128_GCM_SHA256 | TLS1.3 | 适用于RSA或者ECDSA加密算法生成的证书 |
stronger | high | TLS_AES_128_CCM_8_SHA256 | TLS1.3 | 适用于RSA或者ECDSA加密算法生成的证书 |
stronger | high | TLS_AES_128_CCM_SHA256 | TLS1.3 | 适用于RSA或者ECDSA加密算法生成的证书 |

(1)当客户端和服务端同时支持TLS1.3时,混合配置TLS1.2和TLS1.3算法,此时TLS1.2算法不实际生效,SSL会优先选择使用TLS1.3协议;
(2)当客户端和服务端同时支持TLS1.3时,只配置TLS1.2算法,SSL会优先选择使用TLS1.2协议;
(3)当客户端或者服务端任何一方不支持TLS1.3时,SSL会协商为TLS1.2协议,此时配置的TLS1.3算法不实际生效。
介绍如何使用openssl创建自认证数字证书,在测试环境下,用户可以用此数字证书进行测试。在客户的运行环境中,请使用从CA认证中心申请的数字证书。
如果操作系统默认安装了openssl组件,则支持创建自认证证书;如果操作系统未安装openssl组件,则需要用户先安装openssl组件后,才能创建自认证证书。
SUSE 10/11默认安装了openssl组件,下面以SUSE介绍创建服务器自认证证书的相关操作。SUSE操作系统openssl默认安装路径是“/usr/share/ssl”。

keyUsage = cRLSign, keyCertSign
cd /usr/share/ssl/misc
ls
CA.pl c_hash c_issuer CA.sh c_info c_name
./CA.sh -newcaEnter PEM pass phrase:
Verifying - Enter PEM pass phrase:Country Name (2 letter code) [AU]:cn
State or Province Name (full name) [Some-State]:shanxi
Locality Name (eg, city) []:xian
Organization Name (eg, company) [Internet Widgits Pty Ltd]:company-A
Organizational Unit Name (eg, section) []:Unit-A
##Common Name可以随意命名
Common Name (eg, YOUR name) []:johnEmail Address []:
A challenge password []:
An optional company name []: company-AEnter pass phrase for ./demoCA/private/./cakey.pem:openssl x509 -req -in ./demoCA/careq.pem -extfile /etc/ssl/openssl.cnf -extensions v3_ca -signkey ./demoCA/private/cakey.pem -out ./demoCA/cacert.pem -CAcreateserial -days 365openssl req -newkey rsa:2048 -out server.req -keyout server.keyopenssl dsaparam -out dsakey.par 2048
openssl gendsa dsakey.par -out server-dsa.keyopenssl req -new -key server-dsa.key -out server-dsa.req
openssl ecparam -name secp384r1 -genkey -out server-ecc.keyopenssl req -new -key server-ecc.key -out server-ecc.req
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:Country Name (2 letter code) [AU]:cn
State or Province Name (full name) [Some-State]:shanxi
Locality Name (eg, city) []:xian
Organization Name (eg, company) [Internet Widgits Pty Ltd]:company-A
Organizational Unit Name (eg, section) []:Unit-A##Common Name可以随意命名
Common Name (eg, YOUR name) []:roseEmail Address []:
A challenge password []:
An optional company name []: company-Aopenssl ca -in server.req -out server.crtopenssl rsa -in server.key -out server.key
openssl dsa -in server.key -out server.key基于ECDSA加密算法:
openssl ec -in server.key -out server.key

如果不去除服务器私钥的密码保护,则需要使用zencrypt工具对存储密码进行加密保护。
zencrypt -e aes256 -k work_key -f factor_key加密用的工作密钥(LOCAL_KEY)work_key和密钥因子(_FACTOR_KEY)factor_key需从服务器参数视图读取,用生成的密文配置SSL_KEY_PASSWORD参数。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3146656/ ,如需转载,请注明出处,否则将追究法律责任。