到数据库的安全连接
概述
本节提供 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 配置
前端到数据库
在前端安装期间,可以配置到数据库的安全连接:
- 在 配置数据库连接 步骤中勾选 Database TLS encryption 复选框,以启用传输加密。
- 当勾选 TLS encryption 字段时,勾选出现的 Verify database certificate 复选框,以启用使用证书的加密。
对于 MySQL,如果 Database host 设置为 localhost,则 Database TLS encryption 复选框会被禁用,因为使用套接字文件(在 Unix 上)或共享内存(在 Windows 上)的连接无法加密。
对于 PostgreSQL,如果 Database host 字段的值以斜杠开头,或者该字段为空,则 TLS encryption 复选框会被禁用。
在证书 TLS 加密模式下,以下参数可用(如果两个复选框都已勾选):
| Parameter | Description |
|---|---|
| Database TLS CA file | 指定有效 TLS 证书颁发机构(CA)文件的完整路径。 |
| Database TLS key file | 指定有效 TLS 密钥文件的完整路径。 |
| Database TLS certificate file | 指定有效 TLS 证书文件的完整路径。 |
| Database host verification | 勾选此复选框以启用主机验证。 对于 MYSQL 已禁用,因为 PHP MySQL 库不允许跳过对等证书验证步骤。 |
| Database TLS cipher list | 指定自定义的有效密码套件列表。密码套件列表的格式必须符合 OpenSSL 标准。 仅适用于 MySQL。 |
TLS 参数必须指向有效文件。如果它们指向不存在或无效的文件,将导致授权错误。
如果证书文件可写,前端会在 系统信息 报告中生成警告:“TLS certificate files must be read-only.”(仅当 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) 设置此选项将被视为错误。 |



