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与连接时配置的数据库连接地址是否一致。 | 
 
    