[comment]: # ({c39e91a1-f65323a6})
# 2 PostgreSQL 加密配置

[comment]: # ({/c39e91a1-f65323a6})

[comment]: # ({2db934d8-57eb102d})
### 总览

本节提供了一些针对CentOS 8.2和PostgreSQL 13的加密配置示例。

::: noteclassic
 如果 *数据库主机(Database
host)*字段的值以/斜杠开头或该字段为空，则无法加密Zabbix前端与PostgreSQL之间的连接（禁用了GUI中的参数）。
:::

::: noteclassic
 从Zabbix 5.0.5
版本，TLS加密参数名称，已略有更改：为了更清楚起见，添加了"数据库(Database)"前缀。在5.0.0-5.0.4版中，参数名称为*TLS加密(TLS
encryption)*, *TLS证书文件(TLS certificate file)*等。
:::

[comment]: # ({/2db934d8-57eb102d})

[comment]: # ({4b80ecf4-47df7706})
### 前提条件

使用[官方仓库](https://www.postgresql.org/download/linux/redhat/)安装PostgreSQL数据库。

若PostgreSQL没有配置接受TLS连接。请按照文档[使用postgresql.conf准备配置证书](https://www.postgresql.org/docs/13/ssl-tcp.html)，以及通过ph\_hba.conf进行[用户访问控制](https://www.postgresql.org/docs/13/auth-pg-hba-conf.html)配置文档。

默认情况下，PostgreSQL
socket套接字绑定到本机(localhost)，因为网络远程连接允许监听真实的网络接口。

所有[模式](/manual/appendix/install/db_encrypt#terminology)的PostgreSQL设置如下所示：

**/var/lib/pgsql/13/data/postgresql.conf:**

    ...
    ssl = on
    ssl_ca_file = 'root.crt'
    ssl_cert_file = 'server.crt'
    ssl_key_file = 'server.key'
    ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL'
    ssl_prefer_server_ciphers = on
    ssl_min_protocol_version = 'TLSv1.3'
    ...

对于用户访问控制，请调整 */var/lib/pgsql/13/data/pg\_hba.conf*：

    ...
    ### require
    hostssl all all 0.0.0.0/0 md5

    ### verify CA
    hostssl all all 0.0.0.0/0 md5 clientcert=verify-ca

    ### verify full
    hostssl all all 0.0.0.0/0 md5 clientcert=verify-full
    ...

[comment]: # ({/4b80ecf4-47df7706})

[comment]: # ({3e7880bf-fda36821})
### 必须模式（Required mode）

[comment]: # ({/3e7880bf-fda36821})

[comment]: # ({dabba2a1-b7c3e0c8})
#### 前端

要为 Zabbix前端和数据库之间的连接启用仅传输加密：

-   检查 *数据库TLS加密 (Database TLS encryption)*
-   不选择 *验证数据库证书 (Verify database certificate)*

[comment]: # ({/dabba2a1-b7c3e0c8})

[comment]: # ({15eeaf75-99c0e65b})
#### Server

要为Zabbix
server和数据库之间的连接启用仅传输加密，请配置/etc/zabbix/zabbix\_server.conf：

    ...
    DBHost=10.211.55.9
    DBName=zabbix
    DBUser=zbx_srv
    DBPassword=<健壮的复杂密码>
    DBTLSConnect=required
    ...

[comment]: # ({/15eeaf75-99c0e65b})

[comment]: # ({c838a982-ef3e06b2})
### 验证CA模式(Verify CA mode)

[comment]: # ({/c838a982-ef3e06b2})

[comment]: # ({1b75d9a7-5af7ee04})
#### Frontend

To enable encryption with certificate authority verification for
connections between Zabbix frontend and the database:

-   检查 *数据库TLS加密(Database TLS encryption)* 和
    *验证数据库证书(Verify database certificate)*
-   指定 *数据库TLS密钥文件的路径*
-   指定 *数据库TLS CA文件的路径*
-   指定 *数据库TLS证书文件的路径*

或者，可以在 */etc/zabbix/web/zabbix.conf.php:*中进行设置：

    ...
    $DB['ENCRYPTION'] = true;
    $DB['KEY_FILE'] = '';
    $DB['CERT_FILE'] = '';
    $DB['CA_FILE'] = '/etc/ssl/pgsql/root.crt';
    $DB['VERIFY_HOST'] = false;
    $DB['CIPHER_LIST'] = '';
    ...

[comment]: # ({/1b75d9a7-5af7ee04})

[comment]: # ({904d603f-bbddedec})
#### Server

要为Zabbix server和数据库之间的连接启用带有证书验证的加密，请配置
*/etc/zabbix/zabbix\_server.conf:*

    ...
    DBHost=10.211.55.9
    DBName=zabbix
    DBUser=zbx_srv
    DBPassword=<健壮的复杂的密码>
    DBTLSConnect=verify_ca
    DBTLSCAFile=/etc/ssl/pgsql/root.crt
    ...

[comment]: # ({/904d603f-bbddedec})

[comment]: # ({756e2178-ef07b8a6})
### 验证完整模式(full mode)

[comment]: # ({/756e2178-ef07b8a6})

[comment]: # ({da0e9b20-33d1cf20})
#### 前端

为Zabbix前端和数据库之间的连接启用使用证书和数据库主机身份验证的加密：

-   检查 *数据库TLS加密(Database TLS encryption)* 和
    *验证数据库证书(Verify database certificate)*
-   指定 *数据库TLS密钥文件的路径(Database TLS key file)*
-   指定 *数据库TLS CA文件的路径(Database TLS CA file)*
-   指定 *数据库TLS证书文件的路径(Database TLS certificate file)*
-   检查 *数据库主机验证(Database host verification)*

或者，可以在*/etc/zabbix/web/zabbix.conf.php*中进行设置：

    $DB['ENCRYPTION'] = true;
    $DB['KEY_FILE'] = '';
    $DB['CERT_FILE'] = '';
    $DB['CA_FILE'] = '/etc/ssl/pgsql/root.crt';
    $DB['VERIFY_HOST'] = true;
    $DB['CIPHER_LIST'] = '';
    ...

[comment]: # ({/da0e9b20-33d1cf20})

[comment]: # ({f6f5d7f3-61b8c8f3})
#### Server

要为Zabbix
server和数据库之间的连接启用使用证书和数据库主机身份验证的加密，请配置*/etc/zabbix/zabbix\_server.conf*:

    ...
    DBHost=10.211.55.9
    DBName=zabbix
    DBUser=zbx_srv
    DBPassword=<健壮的复杂密码>
    DBTLSConnect=verify_full
    DBTLSCAFile=/etc/ssl/pgsql/root.crt
    DBTLSCertFile=/etc/ssl/pgsql/client.crt
    DBTLSKeyFile=/etc/ssl/pgsql/client.key
    ...

[comment]: # ({/f6f5d7f3-61b8c8f3})
