[comment]: # translation:outdated

[comment]: # ({5407a56a-5407a56a})
# 4 安全的连接数据库

[comment]: # ({/5407a56a-5407a56a})

[comment]: # ({122ed1e9-7cadd09e})
#### 概述

本章节提供了Zabbix的设置步骤和配置示例，用于在以下设备之间建立安全的TLS连接：

|数据库|Zabbix 组件|
|--------|-----------------|
|MySQL|Zabbix frontend, Zabbix server, Zabbix proxy|
|PostgreSQL|Zabbix frontend, Zabbix server, Zabbix proxy|

请参考各官方文档了解如何在DBMS中设置连接加密:

-   [MySQL](https://dev.mysql.com/doc/refman/8.0/en/replication-solutions-encrypted-connections.html): 源和副本复制数据库服务器。
-   [MySQL](https://dev.mysql.com/doc/refman/8.0/en/group-replication-security.html): 组复制等。数据库服务器。
-   [PostgreSQL](https://www.postgresql.org/docs/current/encryption-options.html) 加密选项。

所有示例均基于 MySQL CE (8.0) 和 PgSQL (13) 的 GA 版本，可通过使用 AlmaLinux 8 的官方存储库获得。

[comment]: # ({/122ed1e9-7cadd09e})

[comment]: # ({5af34b43-5af34b43})
##### 要求

设置加密需要以下内容:

-   需要具有 OpenSSL 1.1.X 及以上版本的操作系统或其他替代方案。

::: noteclassic
不建议使用不再更新维护的操作系统，尤其是在新安装的情况下。
:::
数据库引擎(RDBMS)的安装及维护由官方存储库的开发人员提供。操作系统通常自带的数据库版本较老，没有实现加密支持，例如基于RHEL 7 及 PostgreSQL 9.2、MariaDB 5.5 均没有加密支持。

[comment]: # ({/5af34b43-5af34b43})

[comment]: # ({9801ac5b-9801ac5b})
##### 术语

通过设置此选项强制Zabbix Server/proxy/前端使用TLS连接数据库:

- required - 使用无需身份检查的TLS作为数据传输的连接;
- verify\_ca - 使用TLS连接并验证证书;
- verify\_full - 使用TLS连接，验证证书及DBHost指定的数据库身份(CN)匹配的证书;

[comment]: # ({/9801ac5b-9801ac5b})

[comment]: # ({84f30836-84f30836})
#### Zabbix 配置

[comment]: # ({/84f30836-84f30836})

[comment]: # ({90cd2eda-b1071a8a})
##### 前端连接数据库

在前端安装的过程中可以配置使用数据库的安全连接:

- · 在[配置数据库连接](/manual/installation/frontend#configure_db_connection)步骤中勾选*Database TLS encryption*复选框以启用传输加密。
- · 选中*TLS 加密*字段时出现的*验证数据库证书*复选框，以启用证书加密。

::: noteclassic
对于MySQL，如果*Database host*设置为localhost， *Database TLS encryption* 复选框是禁用的，因为连接使用 socket 文件 (Unix) 或共享内存(Windows) 是不能加密的。
对于 PostgreSQL，如果 *Database host* 字段的值以斜线开头或字段为空，则 *TLS encryption* 复选框被禁用。
:::

以下参数在证书模式 TLS 加密时可用 (如果两个复选框都勾选):

|参数|描述|
|---------|-----------|
|*Database TLS CA file*|指定有效的TLS证书颁发机构(CA)文件的完整路径|
|*Database TLS key file*|指定有效的TLS密钥文件的完整路径|
|*Database TLS certificate file*|指定有效TLS证书文件的完整路径|
|*Database host verification*|标记此复选框以激活主机验证.<br>对MYSQL禁用，因为PHP MYSQL库不允许跳过对端证书验证步骤。|
|*Database TLS cipher list*|指定有效密码的自定义列表。密码列表的格式必须符合OpenSSL标准。<br>仅对MySQL可用。|

::: noteimportant
TLS参数必须指向有效的文件。如果指向的文件不存在或无效，则会导致授权错误.\
如果证书文件权限是可写的，前端会在 [系统信息](/manual/web_interface/frontend_sections/reports/status_of_zabbix) 报告中生成警告“TLS 证书文件必须是只读的。” （仅当 PHP 用户是证书的所有者时才显示）。
不支持受密码保护的证书。 
:::

[comment]: # ({/90cd2eda-b1071a8a})

[comment]: # ({11a036b6-d4fd87a2})
##### 用例

Zabbix前端使用GUI界面定义可能的选项:required, verify_ca, verify_full。在安装向导步骤*配置数据库连接*中指定所需选项。这些选项按以下方式映射到配置文件（zabbix.conf.php）:

|图形化设置|配置文件|描述|结果|
|----|----|----|----|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_transport.png)|...<br>// 用于 TLS 连接。<br>$DB \['ENCRYPTION'\] = true;<br>$DB\['KEY\_FILE'\] = '';<br>$DB\['CERT\_FILE'\] = '';<br>$ DB\['CA\_FILE'\] = '';<br>$DB\['VERIFY\_HOST'\] = false;<br>$DB\['CIPHER\_LIST'\] = '';< br>...|选中*数据库 TLS 加密*<br>不选中*验证数据库证书*|启用“必需”模式。|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_verify_ca.png)|...<br>$DB\['ENCRYPTION'\] = true; \\\\ $DB\['KEY\_FILE'\] = '';<br>$DB\['CERT\_FILE'\] = '';<br>$DB\['CA\_FILE'\ ] = '/etc/ssl/mysql/ca.pem';<br>$DB\['VERIFY\_HOST'\] = false;<br>$DB\['CIPHER\_LIST'\] = ''; <br>...|1\。 检查*数据库 TLS 加密*和*验证数据库证书*<br>2。 指定*数据库 TLS CA 文件的路径*|启用“验证\_ca”模式。|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_verify_full1.png)|...<br>// 用于具有严格定义的密码列表的 TLS 连接。 <br>$DB\['ENCRYPTION'\] = true;<br>$DB\['KEY\_FILE'\] = '<key\_file\_path>';<br>$DB\['CERT\ _FILE'\] = '<key\_file\_path>';<br>$DB\['CA\_FILE'\] = '<key\_file\_path>';<br>$DB\['VERIFY\ _HOST'\] = true;<br>$DB\['CIPHER\_LIST'\] = '<cipher\_list>';<br>...<br><br>或者：<br><br> ...<br>// 用于未定义密码列表的 TLS 连接 - 由 MySQL 服务器选择<br>$DB\['ENCRYPTION'\] = true;<br>$DB\['KEY\_FILE'\] = '<key\_file\_path>';<br>$DB\['CERT\_FILE'\] = '<key\_file\_path>';<br>$DB\['CA\_FILE'\] = '<key\_file\_path>';<br>$DB\['VERIFY\_HOST'\] = true;<br>$DB\['CIPHER\_LIST'\] = '';<br>。 ..|1\. 检查*数据库 TLS 加密*和*验证数据库证书*<br>2。 指定*数据库 TLS 密钥文件*<br>3 的路径。 指定*数据库 TLS CA 文件*<br>4. 指定*数据库 TLS 证书文件*<br>6. 指定 TLS 密码列表（可选）|为 MySQL 启用“verify\_full”模式。|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_verify_full2.png)|...<br>$DB\['ENCRYPTION'\] = true; <br>$DB\['KEY\_FILE'\] = '<key\_file\_path>';<br>$DB\['CERT\_FILE'\] = '<key\_file\_path>'; <br>$DB\['CA\_FILE'\] = '<key\_file\_path>';<br>$DB\['VERIFY\_HOST'\] = true;<br>$DB\[' CIPHER\_LIST'\] = ' ';<br>...<br>|1\。 检查*数据库 TLS 加密*和*验证数据库证书*<br>2。 指定*数据库 TLS 密钥文件*<br>3 的路径。 指定*数据库 TLS CA 文件*<br>4. 指定*数据库 TLS 证书文件*<br>6. 检查*数据库主机验证*|为 PostgreSQL 启用“验证\_完整”模式。|

**另请参阅：** [MySQL 的加密配置示例](/manual/appendix/install/db_encrypt/mysql)、[PostgreSQL 的加密配置示例](/manual/appendix/install/db_encrypt/postgres)。

[comment]: # ({/11a036b6-d4fd87a2})

[comment]: # ({2d8949fc-9cfb91d1})
#### Zabbix 服务器/代理配置

可以使用 Zabbix [server](/manual/appendix/config/zabbix_server) 和/或 [proxy](/manual/appendix/config/zabbix_proxy) 配置文件中的相应参数配置与数据库的安全连接。

|配置|结果|
|--|--|
|无|未加密的数据库连接。|
|1\.  设置 DBTLSConnect=required|服务器/代理与数据库建立 TLS 连接。 不允许未加密的连接。|
|1\.  设置 DBTLSConnect=verify\_ca<br>2.  设置 DBTLSCAFile - 指定 TLS 证书颁发机构文件|服务器/代理在验证数据库证书后与数据库建立 TLS 连接。|
|1\. 设置 DBTLSConnect=verify\_full<br>2.  设置 DBTLSCAFile - 指定 TLS 证书颁发机构文件|服务器/代理在验证数据库证书和数据库主机身份后与数据库建立 TLS 连接。|
|1\.  设置 DBTLSCAFile - 指定 TLS 证书颁发机构文件<br>2.  设置 DBTLSCertFile - 指定客户端公钥证书文件<br>3. 设置 DBTLSKeyFile - 指定客户端私钥文件|服务器/代理在连接到数据库时提供客户端证书。|
|1\. 设置 DBTLSCipher - 客户端允许使用最高 TLS 1.2 的 TLS 协议进行连接的加密密码列表<br><br>或 DBTLSCipher13 - 客户端允许使用 TLS 1.3 协议进行连接的加密密码列表|(MySQL) TLS 使用提供的列表中的密码建立连接。<br>(PostgreSQL) 设置此选项将被视为错误。|

[comment]: # ({/2d8949fc-9cfb91d1})
