更新时间:2024-09-05 GMT+08:00

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加密相关参数配置

表1 服务端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证书可在界面上下载。

表2 sslmode参数值说明

sslmode参数值

说明

disable

客户端不使用SSL连接。

allow

客户端将尝试建立SSL/TLS连接,但如果服务器不支持SSL/TLS连接,客户端将以普通文本方式连接。

prefer

默认模式,客户端将首先尝试建立SSL连接,如果服务器不支持SSL连接,则以普通文本方式连接。

require

客户端只尝试SSL连接,只对数据链路加密,并不验证服务器证书的有效性。

verify-ca

客户端使用SSL加密连接到服务器,并验证服务器证书的有效性。

verify-full

客户端使用SSL加密连接到服务器,并验证服务器证书的有效性,同时比对证书内的CN或DNS与连接时配置的数据库连接地址是否一致。