1 使用证书
概述
Zabbix 可以使用 PEM 格式的 RSA 证书,这些证书可由公共证书颁发机构或内部证书颁发机构(CA)签名。
证书验证是根据预先配置的 CA 证书执行的。 此外,还可以使用证书吊销列表(CRL)。
每个 Zabbix 组件只能配置一个证书。
有关设置和运行内部 CA、生成并签署证书请求以及吊销证书的更多信息,请参阅相关教程,例如 OpenSSL PKI Tutorial v2.0。
请仔细考虑并测试您的证书扩展。 更多详细信息,请参见使用 X.509 v3 证书扩展的限制。
证书配置参数
以下配置参数支持用于在 Zabbix 组件上设置证书。
| Parameter | Mandatory | Description |
|---|---|---|
| TLSCAFile | 是 | 包含用于对端证书验证的顶级 CA 证书的文件完整路径名。 如果使用包含多个成员的证书链,请先排列较低级别 CA 的证书,再排列较高级别 CA 的证书。 来自多个 CA 的证书可以包含在同一个文件中。 |
| TLSCRLFile | 否 | 包含证书吊销列表 (CRL) 的文件完整路径名。 |
| TLSCertFile | 是 | 包含证书的文件完整路径名。 如果使用包含多个成员的证书链,请先排列服务器、proxy 或 agent 证书,再排列较低级别 CA 的证书,最后排列较高级别 CA 的证书。 |
| TLSKeyFile | 是 | 包含私钥的文件完整路径名。 请通过设置适当的访问权限,确保该文件仅可由 Zabbix user 读取。 |
| TLSServerCertIssuer | 否 | 允许的服务器证书颁发者。 |
| TLSServerCertSubject | 否 | 允许的服务器证书主题。 |
配置示例
在设置好所需证书后,配置 Zabbix 组件以使用基于证书的加密。
以下是配置的详细步骤:
Zabbix 服务器
1. 准备 CA 证书文件。
为了验证对端证书,Zabbix 服务器必须能够访问包含顶级、自签名根 CA 证书的文件。
例如,如果需要来自两个独立根 CA 的证书,请将它们放入 /home/zabbix/zabbix_ca_file.crt 文件中:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
...
Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
...
X509v3 extensions:
X509v3 Key Usage: critical
Certificate Sign, CRL Sign
X509v3 Basic Constraints: critical
CA:TRUE
...
-----BEGIN CERTIFICATE-----
MIID2jCCAsKgAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MRMwEQYKCZImiZPyLGQB
....
9wEzdN8uTrqoyU78gi12npLj08LegRKjb5hFTVmO
-----END CERTIFICATE-----
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root2 CA
...
Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root2 CA
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
....
X509v3 extensions:
X509v3 Key Usage: critical
Certificate Sign, CRL Sign
X509v3 Basic Constraints: critical
CA:TRUE
....
-----BEGIN CERTIFICATE-----
MIID3DCCAsSgAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MRMwEQYKCZImiZPyLGQB
...
vdGNYoSfvu41GQAR5Vj5FnRJRzv5XQOZ3B6894GY1zY=
-----END CERTIFICATE-----
2. 将 Zabbix 服务器证书/证书链放入一个文件中,例如 /home/zabbix/zabbix_server.crt。
第一个证书是 Zabbix 服务器证书,后面跟着中间 CA 证书:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
...
Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Zabbix server
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
...
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
X509v3 Basic Constraints:
CA:FALSE
...
-----BEGIN CERTIFICATE-----
MIIECDCCAvCgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgTETMBEGCgmSJomT8ixk
...
h02u1GHiy46GI+xfR3LsPwFKlkTaaLaL/6aaoQ==
-----END CERTIFICATE-----
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 2 (0x2)
Signature Algorithm: sha1WithRSAEncryption
Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
...
Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
...
X509v3 extensions:
X509v3 Key Usage: critical
Certificate Sign, CRL Sign
X509v3 Basic Constraints: critical
CA:TRUE, pathlen:0
...
-----BEGIN CERTIFICATE-----
MIID4TCCAsmgAwIBAgIBAjANBgkqhkiG9w0BAQUFADB+MRMwEQYKCZImiZPyLGQB
...
dyCeWnvL7u5sd6ffo8iRny0QzbHKmQt/wUtcVIvWXdMIFJM0Hw==
-----END CERTIFICATE-----
客户端和服务器证书都只使用上面提到的属性,以避免影响证书验证过程。
例如,如果使用了 X509v3 Subject Alternative Name 或 Netscape Cert Type 扩展,OpenSSL 可能无法建立加密连接。
更多信息,请参见使用 X.509 v3 证书扩展的限制。
3. 将 Zabbix 服务器私钥放入一个文件中,例如 /home/zabbix/zabbix_server.key:
-----BEGIN PRIVATE KEY-----
MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQC9tIXIJoVnNXDl
...
IJLkhbybBYEf47MLhffWa7XvZTY=
-----END PRIVATE KEY-----
4. 编辑 Zabbix 服务器配置文件 中的 TLS 配置参数:
TLSCAFile=/home/zabbix/zabbix_ca_file.crt
TLSCertFile=/home/zabbix/zabbix_server.crt
TLSKeyFile=/home/zabbix/zabbix_server.key
Zabbix proxy
1. 按照 Zabbix 服务器 部分中的说明,准备包含顶级 CA 证书、Zabbix proxy 证书/证书链以及私钥的文件。
然后,相应地编辑 Zabbix proxy 配置文件中的 TLSCAFile、TLSCertFile 和 TLSKeyFile 参数。
2. 在 Zabbix proxy 配置文件中编辑其他 TLS 参数:
- 对于主动 proxy:
TLSConnect=cert - 对于被动 proxy:
TLSAccept=cert
为提高 proxy 的安全性,您还可以设置 TLSServerCertIssuer 和 TLSServerCertSubject 参数。
更多信息,请参见限制允许的证书颁发者和主题。
最终的 proxy 配置文件中的 TLS 参数可能如下所示:
TLSConnect=cert
TLSAccept=cert
TLSCAFile=/home/zabbix/zabbix_ca_file.crt
TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSServerCertSubject=CN=Zabbix server,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSCertFile=/home/zabbix/zabbix_proxy.crt
TLSKeyFile=/home/zabbix/zabbix_proxy.key
3. 在 Zabbix 前端中为此 proxy 配置加密:
- 前往:Administration → Proxies。
- 选择该 proxy,然后单击 Encryption 选项卡。
在下面的示例中,Issuer 和 Subject 字段已填写。
有关为何以及如何使用这些字段的更多信息,请参见限制允许的证书颁发者和主题。
对于主动 proxy:

对于被动 proxy:

Zabbix agent
1. 按照 Zabbix 服务器 部分中的说明,准备包含顶级 CA 证书、Zabbix agent 证书/证书链以及私钥的文件。
然后,相应地编辑 Zabbix agent 配置文件 中的 TLSCAFile、TLSCertFile 和 TLSKeyFile 参数。
2. 在 Zabbix agent 配置文件 中编辑其他 TLS 参数:
- 对于主动 agent:
TLSConnect=cert - 对于被动 agent:
TLSAccept=cert
为提高 agent 的安全性,您可以设置 TLSServerCertIssuer 和 TLSServerCertSubject 参数。
更多信息请参见 限制允许的证书颁发者和主题。
最终的 agent 配置文件中的 TLS 参数可能如下所示。
请注意,此示例假定该主机由 proxy 监控,因此将其指定为证书 Subject:
TLSConnect=cert
TLSAccept=cert
TLSCAFile=/home/zabbix/zabbix_ca_file.crt
TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSServerCertSubject=CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSCertFile=/home/zabbix/zabbix_agentd.crt
TLSKeyFile=/home/zabbix/zabbix_agentd.key
3. 在 Zabbix 前端中为由此 agent 监控的主机配置加密。
- 转到:数据采集 → 主机。
- 选择该主机并单击 加密 选项卡。
在下面的示例中,Issuer 和 Subject 字段已填写。
有关为何以及如何使用这些字段的更多信息,请参见 限制允许的证书颁发者和主题。

Zabbix Web 服务
1. 按照 Zabbix 服务器 部分中的说明,准备包含顶级 CA 证书、Zabbix Web 服务证书/证书链以及私钥的文件。
然后,相应地编辑 Zabbix Web 服务配置文件 中的 TLSCAFile、TLSCertFile 和 TLSKeyFile 参数。
2. 在 Zabbix Web 服务配置文件 中编辑另一个 TLS 参数:TLSAccept=cert
最终的 Web 服务配置文件中的 TLS 参数可能如下所示:
TLSAccept=cert
TLSCAFile=/home/zabbix/zabbix_ca_file.crt
TLSCertFile=/home/zabbix/zabbix_web_service.crt
TLSKeyFile=/home/zabbix/zabbix_web_service.key
3. 通过编辑 Zabbix 服务器配置文件 中的 WebServiceURL 参数,将 Zabbix 服务器配置为连接到已配置 TLS 的 Zabbix Web 服务:
WebServiceURL=https://example.com:443/report
限制允许的证书颁发者和主题
当两个 Zabbix 组件(例如服务器和 agent)建立 TLS 连接时,它们会验证彼此的证书。
如果对端证书由受信任的 CA 签名(在 TLSCAFile 中预先配置了顶级证书)、证书有效、未过期并通过其他检查,则组件之间的通信即可继续。
在这种最简单的情况下,不会验证证书的颁发者和主题。
但是,这会带来风险:任何持有有效证书的人都可以冒充其他任何人(例如,可使用主机证书冒充服务器)。
在小型环境中,如果证书由专用的内部 CA 签发且冒充风险较低,这种方式可能是可以接受的;但在规模更大或对安全性更敏感的环境中,这可能并不充分。
如果您的顶级 CA 签发了不应被 Zabbix 接受的证书,或者您希望降低冒充风险,则可以通过指定允许的证书颁发者和主题来限制可接受的证书。
例如,在 Zabbix proxy 配置文件中,您可以指定:
TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSServerCertSubject=CN=Zabbix server,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
使用这些设置后,主动 proxy 将不会与证书颁发者或主题不同的 Zabbix 服务器通信。
同样,被动 proxy 也不会接受来自此类服务器的请求。
匹配 Issuer 和 Subject 字符串的规则
匹配 Issuer 和 Subject 字符串的规则如下:
Issuer和Subject字符串会分别独立检查。 两者都是可选的。- 未指定字符串表示接受任意字符串。
- 字符串按原样进行比较,且必须完全匹配。
- 支持 UTF-8 字符。
但是,不支持通配符(
*)或正则表达式。 - 已实现以下 RFC 4514 要求 - 需要转义的字符(使用反斜杠 '
\',U+005C):- 字符串中的任意位置:'
"'(U+0022)、'+'(U+002B)、','(U+002C)、';'(U+003B)、'<'(U+003C)、'>'(U+003E)、'\\'(U+005C); - 字符串开头:空格(' ',U+0020)或井号('
#',U+0023); - 字符串结尾:空格(' ',U+0020)。
- 字符串中的任意位置:'
- 不支持空字符(U+0000)。 如果遇到空字符,匹配将失败。
- 不支持 RFC 4517 和 RFC 4518 标准。
例如,如果 Issuer 和 Subject 的组织(O)字符串包含尾随空格,而 Subject 的组织单位(OU)字符串包含双引号,则这些字符必须进行转义:
TLSServerCertIssuer=CN=Signing CA,OU=Development head,O=\ Example SIA\ ,DC=example,DC=com
TLSServerCertSubject=CN=Zabbix server,OU=Development group \"5\",O=\ Example SIA\ ,DC=example,DC=com
字段顺序和格式
Zabbix 遵循 RFC 4514 的建议,该规范为这些字段指定了“反向”顺序,即从最低级别字段(CN)开始,接着是中间级别字段(OU、O),最后以最高级别字段(DC)结束。
TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSServerCertSubject=CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
相比之下,OpenSSL 默认按从高级别到低级别的顺序显示 Issuer 和 Subject 字符串。
在下面的示例中,Issuer 和 Subject 字段从最高级别(DC)开始,到最低级别(CN)结束。
空格和字段分隔符的格式也会因所使用的选项而有所不同,因此不会与 Zabbix 要求的格式一致。
$ openssl x509 -noout -in /home/zabbix/zabbix_proxy.crt -issuer -subject
issuer= /DC=com/DC=zabbix/O=Zabbix SIA/OU=Development group/CN=Signing CA
subject= /DC=com/DC=zabbix/O=Zabbix SIA/OU=Development group/CN=Zabbix proxy
$ openssl x509 -noout -text -in /home/zabbix/zabbix_proxy.crt
Certificate:
...
Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
...
Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Zabbix proxy
要为 Zabbix 正确格式化 Issuer 和 Subject 字符串,请使用以下选项调用 OpenSSL:
$ openssl x509 -noout -issuer -subject \
-nameopt esc_2253,esc_ctrl,utf8,dump_nostr,dump_unknown,dump_der,sep_comma_plus,dn_rev,sname\
-in /home/zabbix/zabbix_proxy.crt
这样输出将采用反向顺序、以逗号分隔,并可用于 Zabbix 配置文件和前端:
issuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
subject=CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
使用 X.509 v3 证书扩展的限制
在 Zabbix 中实施 X.509 v3 证书时,某些扩展可能无法得到完全支持,或可能导致行为不一致。
Subject Alternative Name 扩展
Zabbix 不支持 Subject Alternative Name 扩展,该扩展用于指定备用 DNS 名称,例如 IP 地址或电子邮件地址。
Zabbix 只能验证证书中 Subject 字段的值(请参见限制允许的证书颁发者和 Subject)。
如果证书包含 subjectAltName 字段,证书验证的结果可能会因用于编译 Zabbix 组件的具体加密工具包而有所不同。
因此,Zabbix 可能会根据这些组合接受或拒绝证书。
Extended Key Usage 扩展
Zabbix 支持 Extended Key Usage 扩展。
但是,如果使用该扩展,通常要求同时指定 clientAuth(用于 TLS WWW 客户端认证)和 serverAuth(用于 TLS WWW 服务器认证)属性。
例如:
- 在被动检查中,Zabbix agent 作为 TLS 服务器运行时,agent 的证书中必须包含 serverAuth 属性。
- 在主动检查中,agent 作为 TLS 客户端运行时,agent 的证书中必须包含 clientAuth 属性。
虽然 GnuTLS 可能会对密钥用途违规发出警告,但通常即使出现这些警告,它仍允许通信继续进行。
Name Constraints 扩展
对 Name Constraints 扩展的支持因加密工具包而异。
请确保您选择的工具包支持此扩展。
如果此部分被标记为关键,具体使用的工具包可能会限制 Zabbix 加载 CA 证书。
证书吊销列表(CRL)
如果证书已泄露,证书颁发机构(CA)可以通过将该证书加入证书吊销列表(CRL)来吊销它。
CRL 通过配置文件进行管理,并且可以在服务器、proxy 和 agent 的配置文件中使用 TLSCRLFile 参数指定。
例如:
TLSCRLFile=/home/zabbix/zabbix_crl_file.crt
在这种情况下,zabbix_crl_file.crt 可能包含来自多个 CA 的 CRL,内容可能如下所示:
-----BEGIN X509 CRL-----
MIIB/DCB5QIBATANBgkqhkiG9w0BAQUFADCBgTETMBEGCgmSJomT8ixkARkWA2Nv
...
treZeUPjb7LSmZ3K2hpbZN7SoOZcAoHQ3GWd9npuctg=
-----END X509 CRL-----
-----BEGIN X509 CRL-----
MIIB+TCB4gIBATANBgkqhkiG9w0BAQUFADB/MRMwEQYKCZImiZPyLGQBGRYDY29t
...
CAEebS2CND3ShBedZ8YSil59O6JvaDP61lR5lNs=
-----END X509 CRL-----
CRL 文件仅在 Zabbix 启动时加载。
要更新 CRL,请重启 Zabbix。
如果 Zabbix 组件是使用 OpenSSL 编译的,并且使用了 CRL,请确保证书链中的每个顶级 CA 和中间 CA 在 TLSCRLFile 中都有对应的 CRL(即使该 CRL 为空)。