
# SSL加密相关配置
创建RDS for PostgreSQL实例时默认开启SSL，实例创建完成后，不支持关闭。使用SSL加密通信可确保客户端和服务器之间的所有通信都经过加密，防止数据被泄露和篡改，确保数据的完整性。
#### 开启SSL加密对性能的影响
开启SSL加密连接数据库实例后，数据库的只读、读写性能大约有20%左右的影响。
具体的影响跟业务模型有关，如果是复杂SQL，大部分时间花在SQL处理上，使用SSL加密对性能影响不明显；但如果是非常简单的SQL，执行本身很快，使用SSL会加大影响。
#### 服务端查看是否开启SSL加密
PostgreSQL实例服务端默认开启SSL，可登录数据库，使用sql命令查看：
```
show ssl;
```
- 如果该参数的值为"on"，则表示服务端SSL连接已启用。
- 如果该参数的值为"off"，则表示服务端SSL连接未启用。
![](https://support.huaweicloud.com/usermanual-rds-pg/public_sys-resources/note_3.0-zh-cn.png)
服务端SSL默认开启，不支持关闭。
服务端开启SSL仅表明支持使用SSL连接，具体连接是否为SSL连接，取决于客户端发起连接时是否指定使用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"。
![](https://support.huaweicloud.com/usermanual-rds-pg/public_sys-resources/note_3.0-zh-cn.png)
当"sslmode"取值为"Verify-CA"或"Verify-Full"时，需要配置"Root certificate"参数，表示数据库CA证书的路径，CA证书可在界面上下载。
表2sslmode参数值说明 
| sslmode参数值  | 说明                                                              |
|:---|:---|
| disable     | 客户端不使用SSL连接。                                                    |
| allow       | 客户端将尝试建立SSL/TLS连接，但如果服务器不支持SSL/TLS连接，客户端将以普通文本方式连接。             |
| prefer      | 默认模式，客户端将首先尝试建立SSL连接，如果服务器不支持SSL连接，则以普通文本方式连接。                  |
| require     | 客户端只尝试SSL连接，只对数据链路加密，并不验证服务器证书的有效性。                             |
| verify-ca   | 客户端使用SSL加密连接到服务器，并验证服务器证书的有效性。                                  |
| verify-full | 客户端使用SSL加密连接到服务器，并验证服务器证书的有效性，同时比对证书内的CN或DNS与连接时配置的数据库连接地址是否一致。 |
   
#### 相关操作
[通过JDBC连接RDS for PostgreSQL实例](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_connect_08.html)
[通过psql命令行内网连接实例](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_connect_05.html)
[通过psql命令行公网连接实例](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_connect_06.html)
