到数据库的安全连接
概述
本节提供 Zabbix 的设置步骤和配置示例,用于在以下组件之间建立安全的 TLS 连接:
| Database | Zabbix components |
|---|---|
| MySQL | Zabbix 前端, Zabbix 服务器, Zabbix proxy |
| PostgreSQL | Zabbix 前端, Zabbix 服务器, Zabbix proxy |
要在 DBMS 内部设置连接加密,请参阅官方厂商文档了解详细信息:
- MySQL: 源和副本复制数据库服务器。
- MySQL: 组复制等数据库服务器。
- PostgreSQL 加密选项。
所有示例均基于通过官方仓库可获得的 MySQL CE (8.0) 和 PgSQL (13) 的 GA 版本,并使用 CentOS 8。
要求
设置加密需要满足以下条件:
- 开发者支持的操作系统,且 OpenSSL >=1.1.X 或 替代方案。
建议避免使用已进入生命周期终止状态的操作系统, 尤其是在新安装的情况下
- 已从开发者提供的官方 仓库安装并维护的数据库引擎(RDBMS)。操作系统通常会附带过时的数据库软件版本,而这些版本并未实现加密支持,例如基于 RHEL 7 的系统以及 PostgreSQL 9.2、MariaDB 5.5(不支持加密)。
术语
设置此选项会强制 Zabbix 服务器/proxy 和前端到数据库使用 TLS 连接:
required- 使用 TLS 作为传输模式进行连接,不进行身份验证verify_ca- 使用 TLS 连接并验证证书verify_full- 使用 TLS 连接,验证证书,并验证 DBHost 指定的数据库标识(CN)与其证书匹配
Zabbix 配置
前端到数据库
可以在前端安装期间配置与数据库的安全连接:
- 在配置数据库连接步骤中勾选数据库 TLS 加密复选框,以启用传输加密。
- 勾选选中TLS 加密字段后显示的验证数据库证书复选框,以启用基于证书的加密。
对于 MySQL,如果数据库主机设置为 localhost,则数据库 TLS 加密复选框处于禁用状态,因为使用套接字文件(在 Unix 上)或共享内存(在 Windows 上)的连接无法加密。
对于 PostgreSQL,如果数据库主机字段的值以斜杠开头,或该字段为空,则TLS 加密复选框处于禁用状态。
在基于证书的 TLS 加密模式下(如果两个复选框均已勾选),以下参数可用:
| 参数 | 描述 |
|---|---|
| 数据库 TLS CA 文件 | 指定有效 TLS 证书颁发机构(CA)文件的完整路径。 |
| 数据库 TLS 密钥文件 | 指定有效 TLS 密钥文件的完整路径。 |
| 数据库 TLS 证书文件 | 指定有效 TLS 证书文件的完整路径。 |
| 数据库主机验证 | 勾选此复选框以启用主机验证。 MySQL 不支持此选项,因为 PHP MySQL 库不允许跳过对等证书验证步骤。 |
| 数据库 TLS 加密套件列表 | 指定有效加密套件的自定义列表。加密套件列表的格式必须符合 OpenSSL 标准。 仅适用于 MySQL。 |
TLS 参数必须指向有效文件。如果指向不存在或无效的文件,将导致授权错误。
如果证书文件可写,前端会在系统信息报告中生成警告:“TLS 证书文件必须为只读。”(仅当 PHP 用户是证书所有者时显示)。
不支持受密码保护的证书。
使用场景
Zabbix 前端使用 GUI 界面定义可用选项:required、verify_ca、verify_full。
在安装向导的 配置数据库连接 步骤中指定所需选项。
这些选项按以下方式映射到前端配置文件(zabbix.conf.php):
| GUI 设置 | 配置文件 | 描述 | 结果 |
|---|---|---|---|
![]() |
... // 用于 TLS 连接。 $DB['ENCRYPTION'] = true;$DB['KEY_FILE'] = '';$DB['CERT_FILE'] = '';$DB['CA_FILE'] = '';$DB['VERIFY_HOST'] = false;$DB['CIPHER_LIST'] = '';... |
1. 勾选 数据库 TLS 加密 2. 不勾选 验证数据库证书 |
启用 required 模式。 |
![]() |
...$DB['ENCRYPTION'] = true;$DB['KEY_FILE'] = '';$DB['CERT_FILE'] = '';$DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';$DB['VERIFY_HOST'] = false;$DB['CIPHER_LIST'] = '';... |
1. 勾选 数据库 TLS 加密 和 验证数据库证书 2. 指定 数据库 TLS CA 文件 的路径 |
启用 verify_ca 模式。 |
![]() |
... // 用于使用严格定义的密码套件列表进行 TLS 连接。 $DB['ENCRYPTION'] = true;$DB['KEY_FILE'] = '<key_file_path>';$DB['CERT_FILE'] = '<key_file_path>';$DB['CA_FILE'] = '<key_file_path>';$DB['VERIFY_HOST'] = true;$DB['CIPHER_LIST'] = '<cipher_list>';... 或者: ... // 用于未定义密码套件列表的 TLS 连接 - 由 MySQL 服务器选择 $DB['ENCRYPTION'] = true;$DB['KEY_FILE'] = '<key_file_path>';$DB['CERT_FILE'] = '<key_file_path>';$DB['CA_FILE'] = '<key_file_path>';$DB['VERIFY_HOST'] = true;$DB['CIPHER_LIST'] = '';... |
1. 勾选 数据库 TLS 加密 和 验证数据库证书 2. 指定 数据库 TLS 密钥文件 的路径 3. 指定 数据库 TLS CA 文件 的路径 4. 指定 数据库 TLS 证书文件 的路径 5. 指定 数据库 TLS 密码套件列表(可选) |
为 MySQL 启用 verify_full 模式。 |
![]() |
...$DB['ENCRYPTION'] = true;$DB['KEY_FILE'] = '<key_file_path>';$DB['CERT_FILE'] = '<key_file_path>';$DB['CA_FILE'] = '<key_file_path>';$DB['VERIFY_HOST'] = true;$DB['CIPHER_LIST'] = ' ';... |
1. 勾选 数据库 TLS 加密 和 验证数据库证书 2. 指定 数据库 TLS 密钥文件 的路径 3. 指定 数据库 TLS CA 文件 的路径 4. 指定 数据库 TLS 证书文件 的路径 5. 勾选 数据库主机验证 |
为 PostgreSQL 启用 verify_full 模式。 |
另请参阅: MySQL 加密配置示例、PostgreSQL 加密配置示例。
Zabbix 服务器/proxy 配置
可以在 Zabbix 服务器和/或 proxy 配置文件中,通过相应参数配置与数据库的安全连接。
| 配置 | 结果 |
|---|---|
| 无 | 与数据库建立未加密的连接。 |
设置 DBTLSConnect=required |
服务器/proxy 与数据库建立 TLS 连接。不允许使用未加密的连接。 |
1. 设置 DBTLSConnect=verify_ca2. 设置 DBTLSCAFile - 指定 TLS 证书颁发机构文件 |
服务器/proxy 在验证数据库证书后,与数据库建立 TLS 连接。 |
1. 设置 DBTLSConnect=verify_full2. 设置 DBTLSCAFile - 指定 TLS 证书颁发机构文件 |
服务器/proxy 在验证数据库证书和数据库主机身份后,与数据库建立 TLS 连接。 |
1. 设置 DBTLSCAFile - 指定 TLS 证书颁发机构文件2. 设置 DBTLSCertFile - 指定客户端公钥证书文件3. 设置 DBTLSKeyFile - 指定客户端私钥文件 |
服务器/proxy 在连接数据库时提供客户端证书。 |
设置 DBTLSCipher - 客户端允许用于 TLS 1.2 及更低版本 TLS 协议连接的加密密码套件列表或设置 DBTLSCipher13 - 客户端允许用于 TLS 1.3 协议连接的加密密码套件列表 |
(MySQL) TLS 连接将使用所提供列表中的密码套件建立。 (PostgreSQL) 设置此选项将被视为错误。 |



