SSL加密相关配置
创建RDS for PostgreSQL实例时默认开启SSL,实例创建完成后,不支持关闭。使用SSL加密通信可确保客户端和服务器之间的所有通信都经过加密,防止数据被泄露和篡改,确保数据的完整性。
开启SSL加密对性能的影响
开启SSL加密连接数据库实例后,数据库的只读、读写性能大约有20%左右的影响。
具体的影响跟业务模型有关,如果是复杂SQL,大部分时间花在SQL处理上,使用SSL加密对性能影响不明显;但如果是非常简单的SQL,执行本身很快,使用SSL会加大影响。
服务端查看是否开启SSL加密
PostgreSQL实例服务端默认开启SSL,可登录数据库,使用sql命令查看:
show ssl;
- 如果该参数的值为“on”,则表示服务端SSL连接已启用。
- 如果该参数的值为“off”,则表示服务端SSL连接未启用。
服务端SSL默认开启,不支持关闭。
客户端查看是否开启SSL加密
客户端是否使用SSL加密,可通过以下方式查看:
- 使用psql连接数据库时,连接成功后出现如下信息:
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
- protocol表示SSL连接协议是TLSv1.2。
- cipher表示使用SSL连接的加密算法为ECDHE-RSA-AES256-GCM-SHA384。
- bits表示密钥长度为256位。
- 可以通过查询“pg_stat_ssl”视图来查看客户端连接是否使用SSL。如果客户端使用SSL连接,则该视图中会显示相应的连接信息。
SELECT * FROM pg_stat_ssl;
该查询将返回所有当前SSL连接的统计信息,包括连接的进程ID、客户端IP地址、SSL协议版本、SSL加密算法、客户端证书的有效性和到期时间等。如果客户端连接使用SSL,则可以在该视图中看到相关信息。
服务端SSL加密相关参数配置
参数名称 |
值 |
描述 |
---|---|---|
ssl |
on |
默认启用SSL连接,不可修改。 |
ssl_cert_file |
/CA/server.pem |
SSL服务器证书文件的位置,不可修改。 |
ssl_ciphers |
ALL:!ADH:!LOW:!EXP:!MD5:!3DES:!DES:@STRENGTH; |
指定一个SSL密码列表,用于安全连接。用户可根据安全要求进行修改。推荐使用 EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EDH+aRSA+AESGCM:EDH+aDSS+AESGCM:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!SRP:!RC4 |
ssl_key_file |
/CA/server.key |
SSL服务器私钥文件的位置,不可修改。 |
ssl_min_protocol_version |
TLSv1.2 |
设置要使用的最小SSL/TLS协议版本,用户可根据安全要求进行修改,推荐使用TLSv1.2及以上版本。 |
客户端SSL加密相关参数配置
PostgreSQL数据库开启SSL加密后,表示允许客户端通过SSL连接数据库。
在客户端连接数据库时,可根据不同场景选择“sslmode”参数取值。
- 客户端使用SSL连接时,“sslmode”选择“allow”、“prefer”、“Require”、“Verify-CA”或“Verify-Full”。默认值是“prefer”。
- 客户端不使用SSL连接时,“sslmode”选择“Disable”。
当“sslmode”取值为“Verify-CA”或“Verify-Full”时,需要配置“Root certificate”参数,表示数据库CA证书的路径,CA证书可在界面上下载。
sslmode参数值 |
说明 |
---|---|
disable |
客户端不使用SSL连接。 |
allow |
客户端将尝试建立SSL/TLS连接,但如果服务器不支持SSL/TLS连接,客户端将以普通文本方式连接。 |
prefer |
默认模式,客户端将首先尝试建立SSL连接,如果服务器不支持SSL连接,则以普通文本方式连接。 |
require |
客户端只尝试SSL连接,只对数据链路加密,并不验证服务器证书的有效性。 |
verify-ca |
客户端使用SSL加密连接到服务器,并验证服务器证书的有效性。 |
verify-full |
客户端使用SSL加密连接到服务器,并验证服务器证书的有效性,同时比对证书内的CN或DNS与连接时配置的数据库连接地址是否一致。 |