首页 > 数据库 > > 客户端接入认证-用SSL进行安全的TCP/IP连接
GaussDB 200支持SSL标准协议(TLS 1.2),SSL协议是安全性更高的协议标准,它们加入了数字签名和数字证书来实现客户端和服务器的双向身份验证,保证了通信双方更加安全的数据传输。
从CA认证中心申请到正式的服务器、客户端的证书和密钥。(假设服务器的私钥为server.key,证书为server.crt,客户端的私钥为client.key,证书为client.crt,CA根证书名称为cacert.pem。)
GaussDB 200在集群部署完成后,默认已开启SSL认证模式。服务器端证书,私钥以及根证书已经默认配置完成。用户需要配置客户端的相关参数。
已从CA认证中心申请到客户端默认证书,私钥,根证书以及私钥密码加密文件。假设证书,私钥和根证书都放在“/home/omm”目录。
双向认证需配置如下参数:
export PGSSLCERT="/home/omm/client.crt"
export PGSSLKEY="/home/omm/client.key"
export PGSSLMODE="verify-ca"
export PGSSLROOTCERT="/home/omm/cacert.pem"
单向认证需要配置如下参数:
export PGSSLMODE="verify-ca"
export PGSSLROOTCERT="/home/omm/cacert.pem"
客户端根证书,密钥,证书以及密钥密码加密文件的权限,需保证权限为600。如果权限不满足要求,则客户端无法以SSL连接到集群。
chmod 600 client.key
chmod 600 client.crt
chmod 600 client.key.cipher
chmod 600 client.key.rand
chmod 600 cacert.pem
注意:从安全性考虑,建议使用双向认证方式。
配置客户端环境变量,必须包含文件的绝对路径。
认证方式 | 含义 | 配置客户端环境变量 | 维护建议 |
|---|---|---|---|
双向认证(推荐) | 客户端验证服务器证书的有效性,同时服务器端也要验证客户端证书的有效性,只有认证成功,连接才能建立。 | 设置如下环境变量:
| 该方式应用于安全性要求较高的场景。使用此方式时,建议设置客户端的PGSSLMODE变量为verify-ca。确保了网络数据的安全性。 |
单向认证 | 客户端只验证服务器证书的有效性,而服务器端不验证客户端证书的有效性。服务器加载证书信息并发送给客户端,客户端使用根证书来验证服务器端证书的有效性。 | 设置如下环境变量:
| 为防止基于TCP链接的欺骗,建议使用SSL证书认证功能。除配置客户端根证书外,建议客户端使用PGSSLMODE变量为verify-ca方式连接。 |
在服务器端的postgresql.conf文件中配置相关参数,详细信息请参见表2。
参数 | 描述 | 取值范围 |
|---|---|---|
ssl | 表示是否启动SSL功能。 |
默认值:on |
require_ssl | 设置服务器端是否强制要求SSL连接。该参数只有当参数ssl为on时才有效。 |
默认值:off |
ssl_cert_file | 指定服务器证书文件,包含服务器端的公钥。服务器证书用以表明服务器身份的合法性,公钥将发送给对端用来对数据进行加密。 | 请以实际的证书名为准。必须使用相对路径,相对路径是相对于数据目录的。 默认值:server.crt |
ssl_key_file | 指定服务器私钥文件,用以数字签名和对公钥加密的数据进行解密。 | 请以实际的服务器私钥名称为准。必须使用相对路径,相对路径是相对于数据目录的。 默认值:server.key |
ssl_ca_file | CA服务器的根证书。此参数可选择配置,需要验证客户端证书的合法性时才需要配置。 | 请以实际的CA服务器根证书名称为准。 默认值:空,表示不对客户端的身份进行校验。 |
ssl_crl_file | 证书吊销列表,如果客户端证书在该列表中,则当前客户端证书被视为无效证书。 | 请以实际的证书吊销列表名称为准。 默认值:空,表示没有吊销列表。 |
ssl_ciphers | SSL通讯使用的加密算法。 | 本产品支持的加密算法的详细信息请参见表4。 默认值:ALL,表示允许对端使用产品支持的所有加密算法,但不包含ADH、LOW、EXP、MD5算法,最后满足条件的算法按照安全强度进行排序。 |
在客户端配置SSL认证相关的环境变量,详细信息请参见表3。
说明:客户端环境变量的路径以“/home/omm”为例,在实际操作中请使用实际路径进行替换。
环境变量 | 描述 | 取值范围 |
|---|---|---|
PGSSLCERT | 指定客户端证书文件,包含客户端的公钥。客户端证书用以表明客户端身份的合法性,公钥将发送给对端用来对数据进行加密。 | 必须包含文件的绝对路径,如: 默认值:空 |
PGSSLKEY | 指定客户端私钥文件,用以数字签名和对公钥加密的数据进行解密。 | 必须包含文件的绝对路径,如: 默认值:空 |
PGSSLMODE | 设置是否和服务器进行SSL连接协商,以及指定SSL连接的优先级。 | 取值及含义:
默认值:prefer |
PGSSLROOTCERT | 指定为客户端颁发证书的根证书文件,根证书用于验证服务器证书的有效性。 | 必须包含文件的绝对路径,如: 默认值:空 |
PGSSLCRL | 指定证书吊销列表文件,用于验证服务器证书是否在废弃证书列表中,如果在,则服务器证书将会被视为无效证书。 | 必须包含文件的绝对路径,如: 默认值:空 |
服务器端参数ssl、require_ssl与客户端参数sslmode配置组合结果如下:
ssl(服务器) | sslmode(客户端) | require_ssl(服务器) | 结果 |
|---|---|---|---|
on | disable | on | 由于服务器端要求使用SSL,但客户端针对该连接禁用了SSL,因此无法建立连接。 |
disable | off | 连接未加密。 | |
allow | on | 连接经过加密。 | |
allow | off | 连接未加密。 | |
prefer | on | 连接经过加密。 | |
prefer | off | 连接经过加密。 | |
require | on | 连接经过加密。 | |
require | off | 连接经过加密。 | |
verify-ca | on | 连接经过加密,且验证了服务器证书。 | |
verify-ca | off | 连接经过加密,且验证了服务器证书。 | |
verify-full | on | 连接经过加密,且验证了服务器证书和主机名。 | |
verify-full | off | 连接经过加密,且验证了服务器证书和主机名。 | |
off | disable | on | 连接未加密。 |
disable | off | 连接未加密。 | |
allow | on | 连接未加密。 | |
allow | off | 连接未加密。 | |
prefer | on | 连接未加密。 | |
prefer | off | 连接未加密。 | |
require | on | 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 | |
require | off | 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 | |
verify-ca | on | 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 | |
verify-ca | off | 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 | |
verify-full | on | 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 | |
verify-full | off | 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 |
SSL传输支持一系列不同强度的加密和认证算法。用户可以通过修改postgresql.conf中的ssl_ciphers参数指定数据库服务器使用的加密算法。目前本产品SSL支持的加密算法如表4所示。
加密强度 | 安全程度 | 加密算法描述 |
|---|---|---|
stronger | high | DHE-RSA-AES256-GCM-SHA384 |
stronger | high | DHE-RSA-AES128-GCM-SHA256 |
stronger | high | DHE-DSS-AES256-GCM-SHA384 |
stronger | high | DHE-DSS-AES128-GCM-SHA256 |
stronger | medium | DHE-RSA-AES256-SHA256 |
stronger | medium | DHE-RSA-AES128-SHA256 |
stronger | medium | DHE-DSS-AES256-SHA256 |
stronger | medium | DHE-DSS-AES128-SHA256 |
stronger | high | DHE-RSA-AES256-CCM |
stronger | high | DHE-RSA-AES128-CCM |
stronger | medium | DHE-RSA-AES256-SHA |
stronger | medium | DHE-RSA-AES128-SHA |
stronger | medium | DHE-DSS-AES256-SHA |
stronger | medium | DHE-DSS-AES128-SHA |
说明:如在postgresql.conf设置ssl_ciphers='DHE-RSA-AES256-GCM-SHA384;DHE-RSA-AES256-SHA256;DHE-RSA-AES256-CCM'
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3128730/ ,如需转载,请注明出处,否则将追究法律责任。