1. 用SSL进行安全的TCP/IP连接
GaussDB支持通过SSL加密客户端和服务器之间、主机和备机之间的通讯,为敏感数据在Internet上的传输提供了一种安全保障手段。
背景信息
GaussDB支持SSL 3.0协议标准,SSL 3.0协议是一种安全性更高的协议标准,它加入了数字签名和数字证书来实现客户端和服务器的双向身份验证,保证了通信双方更加安全的数据传输。
- 如果只是为了测试,可以使用Openssl生成证书。
- SSL相关的参数既控制客户端和主机的SSL通讯,同时还控制着主机和备机之间的SSL通讯。
开启SSL认证模式。
gs_guc set -c ssl=on
配置客户端接入认证参数(对于双机,只需要在主机上配置)。
cd /opt/gaussdb/data
vi pg_hba.conf
例如,增加类似如下的信息,表示允许10.0.0.2/24网段的客户端以ssl认证方式连接到GaussDB服务:
hostssl all all 10.0.0.2/24 sha256
详细的配置方法和参数说明请参见配置客户端接入认证。
https://blog.csdn.net/qq_42226855/article/details/109563367
配置SSL认证相关的数字证书参数,具体要求请参见表1。
配置为服务器端参数,具体参数说明请参见表2。
gaussdba@gauss21:/opt/gaussdb/data> gs_guc set -c "ssl_cert_file='server.crt'"
gs_guc set: ssl_cert_file='server.crt'
gaussdba@gauss21:/opt/gaussdb/data> gs_guc set -c "ssl_key_file='server.key'"
gs_guc set: ssl_key_file='server.key'
gaussdba@gauss21:/opt/gaussdb/data> gs_guc set -c "ssl_ca_file='cacert.pem'"
gs_guc set: ssl_ca_file='cacert.pem'
gaussdba@gauss21:/opt/gaussdb/data> gs_guc set -c "ssl_crl_file=' '"
gs_guc set: ssl_crl_file=' '
配置客户端参数。
export PGSSLCERT="/opt/gaussdb/data/client.crt"
export PGSSLKEY="/opt/gaussdb/data/client.key"
export PGSSLMODE="prefer"
export PGSSLROOTCERT=" "
export PGSSLCRL=" "
表1 认证方式
认证方式 | 含义 | 配置服务器端参数(对于双机,需要在主机和备机上配置) | 配置客户端环境变量 |
双向认证(推荐) | 客户端验证服务器证书的有效性, 同时服务器端也要验证客户端证书 的有效性,只有认证成功,连接才 能建立。 |
将服务器证书、服务器私钥、废弃证书和根证书拷贝到$GAUSSDATA下,并设置如下参数: ssl_cert_file ssl_key_file ssl_ca_file ssl_crl_file ssl_ciphers 参数的取值请参见表2和表4。 |
设置如下环境变量: PGSSLCERT PGSSLKEY PGSSLROOTCERT PGSSLCRL PGSSLMODE 环境变量的取值请参见表3。 |
服务器认证 | 客户端只验证服务器证书的有效性, 而服务器端不验证客户端证书的有 效性。服务器加载证书信息并发送 给客户端,客户端使用根证书来验 证服务器端证书的有效性。 |
将服务器端证书和私钥文件拷贝到$GAUSSDATA下,并设置如下参数: ssl_cert_file ssl_key_file ssl_ciphers 参数的取值请参见表2和表4。 |
设置如下环境变量: PGSSLROOTCERT PGSSLCRL PGSSLMODE 环境变量的取值请参见表3。 |
客户端认证 | 服务器端只验证客户端证书的有效性,而客户端不验证服务端证书的有效性。在握手阶段,客户端将加载证书信息并发送给服务器,服务器端使用根证书来验证客户端证书的有效性。 |
将服务器端的根证书和证书吊销列表拷贝到$GAUSSDATA下,并设置如下参数: ssl_ca_file ssl_crl_file ssl_ciphers 参数的取值请参见表2和表4。 |
设置如下环境变量: PGSSLROOTCERT PGSSLCRL PGSSLMODE 环境变量的取值请参见表3。 |
修改服务器密钥的权限。假设名称为server.key,在/opt/gaussdb/data目录下。
权限必须是600,且属主为gaussdba,属组为dbgrp。如果权限不满足要求,则GaussDB无法启动。使用如下命令修改权限:
cd /opt/gaussdb/data
chown gaussdba:dbgrp server.key
chmod og-rwx server.key
在备机和级联备机上,还需要进行以下配置,才能使主备之间、备机和级联备机之间正常通讯(此时,备机相当于是主机的客户端,级联备机相当于是备机的客户端)。
- 设置环境变量PGSSLCERT、PGSSLKEY、PGSSLROOTCERT和PGSSLCRL,环境变量的取值请参见表3。
- 配置ssl_ciphers参数(建议保持默认值ALL),GaussDB支持的加密算法请参见表4。
重启GaussDB使配置生效。
gs_ctl restart
表2 服务器参数
参数 | 描述 | 取值范围 |
ssl | 表示是否启动SSL功能 | on:开启SSL功能。 off:关闭SSL功能。 默认值:off |
ssl_cert_file | 指定服务器证书文件,包含服务器端的公钥。服务器证书用以表明服务器身份的合法性,公钥将发送给对端用来对数据进行加密。 | 请以实际的证书名为准。必须使用相对路径,相对路径是相对于数据目录的。 默认值:server.crt |
ssl_key_file | 指定服务器私钥文件,用以数字签名和对公钥加密的数据进行解密。 | 请以实际的服务器私钥名称为准。必须使用相对路径,相对路径是相对于数据目录的。 默认值:server.key |
ssl_ca_file | CA服务器的根证书。此参数可选择配置,需要验证客户端证书的合法性时才需要配置。 | 请以实际的CA服务器根证书名称为准。 默认值:空,表示不对客户端的身份进行校验。 |
ssl_crl_file | 证书吊销列表,如果客户端证书在该列表中,则当前客户端证书被视为无效证书。 | 请以实际的证书吊销列表名称为准。 默认值:空,表示没有吊销列表。 |
ssl_ciphers | SSL通讯使用的加密算法。 | GaussDB支持的加密算法请参见表4。 默认值:ALL,表示允许对端使用所有GaussDB支持的加密算法。 |
表3 客户端参数
环境变量 | 描述 | 取值范围 |
PGSSLCERT | 指定客户端证书文件,包含客户端的公钥。客户端证书用以表明客户端身份的合法性,公钥将发送给对端用来对数据进行加密。 | 必须包含文件的绝对路径,如: export PGSSLCERT="/home/gaussdb/data/client.crt"默认值:空 |
PGSSLKEY | 指定客户端私钥文件,用以数字签名和对公钥加密的数据进行解密。 | 必须包含文件的绝对路径,如: export PGSSLKEY="/home/gaussdb/data/client.key"默认值:空 |
PGSSLMODE | 设置是否和服务器进行SSL连接协商,以及指定SSL连接的优先级。 | 取值及含义: disable 只尝试非SSL连接。 allow 首先尝试非SSL连接,如果连接失败,再尝试SSL连接。 prefer 首先尝试SSL连接,如果连接失败,将尝试一个非SSL连接。 require 只尝试SSL连接。如果存在CA文件,则按设置成verify-ca的方式验证。 verify_ca 只尝试SSL连接,并且验证服务器证书是否由可信任的证书机构颁发。 verify_full 只尝试SSL连接,并且验证服务器证书是否由可信任的证书机构颁发,以及验证服务器主机名是否与证书中的一致。 默认值:prefer |
PGSSLROOTCERT | 指定为客户端颁发证书的根证书文件,根证书用于验证服务器证书的有效性。 | 必须包含文件的绝对路径,如: export PGSSLROOTCERT="/home/gaussdb/data/root.crt"默认值:空 |
PGSSLCRL | 指定证书吊销列表文件,用于验证服务器证书是否在废弃证书列表中,如果在,则服务器证书将会被视为无效证书。 | 必须包含文件的绝对路径,如: export PGSSLCRL="/home/gaussdb/data/root.crl"默认值:空 |
通过修改postgresql.conf中的ssl_ciphers来指定数据库服务器使用的加密算法。目前GaussDB SSL支持的加密算法如表4。
表4 加密算法
加密强度 | 加密速度 | 加密算法描述 |
stronger | faster | AES256-SHA |
stronger | faster | DES-CBC3-SHA |
stronger | faster | AES128-SHA |
stronger | faster | RC4-SHA |
stronger | faster | RC4-MD5 |
stronger | slower | DHE-RSA-AES256-SHA |
stronger | slower | DHE-DSS-AES256-SHA |
stronger | slower | EDH-RSA-DES-CBC3-SHA |
stronger | slower | EDH-DSS-DES-CBC3-SHA |
stronger | slower | DHE-RSA-AES128-SHA |
stronger | slower | DHE-DSS-AES128-SHA |
middle | faster | DES-CBC-SHA |
middle | slower | EDH-RSA-DES-CBC-SHA |
middle | slower | EDH-DSS-DES-CBC-SHA |
2. 用SSH隧道进行安全的TCP/IP连接
为了保证GaussDB服务器和客户端之间的安全通讯,可以在服务器和客户端之间构建安全的SSH隧道。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
背景信息
从SSH客户端来看,SSH提供了两种级别的安全验证:
- 基于口令的安全验证:使用帐号和口令登录到远程主机。所有传输的数据都会被加密,但是不能保证正在连接的服务器就是需要连接的服务器。可能会有其他服务器冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
- 基于密匙的安全验证:用户必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。第二种级别不仅加密所有传送的数据,而且避免“中间人”这种攻击方式。但是整个登录的过程可能需要10秒。
- SSH服务和GaussDB运行在同一台服务器上。
从本地主机建立到GaussDB服务器的SSH隧道。
ssh -L 63333:localhost:5432 username@hostIP
说明:
- -L参数的第一个数字(63333)是本端通道的端口号,可以自由选择。
- 第二个数字(5432)是通道的远端端口,也就是服务器使用的端口号。
- localhost是本机IP地址,username是要连接的GaussDB服务器上的用户名,hostIP是要连接的GaussDB主机的IP地址。
相关参考
gaussdb 数据库参数说明【postgresql.conf、pg_hba.conf、pg_ident.conf】【01】
https://blog.csdn.net/qq_42226855/article/details/108646659
gaussdb 数据库参数说明【连接、连接池、安全和认证】【02】
https://blog.csdn.net/qq_42226855/article/details/108748031
gaussdb 数据库用户和安全管理【用openssl生成SSL证书的流程】【05】
https://blog.csdn.net/qq_42226855/article/details/109578424