1 使用证书

概述

Zabbix 可以使用 PEM 格式的 RSA 证书,该证书由公共或内部证书颁发机构 (CA) 签名。

证书验证是针对预配置的 CA 证书执行的。
可选地,可以使用证书吊销列表 (CRL)

每个 Zabbix 组件只能配置一个证书。

有关设置和运营内部 CA、生成和签署证书请求以及吊销证书的更多信息,请参考诸如 OpenSSL PKI Tutorial v2.0 之类的教程。

请仔细考虑并测试您的证书扩展。
更多详细信息,请参阅 X.509 v3 证书扩展使用的限制

证书配置参数

Zabbix 组件上支持以下配置参数用于设置证书。

参数 必填 描述
TLSCAFile yes 包含用于对等证书验证的 Top-级 CA 证书的 file 的完整路径名。
如果使用包含多个成员的证书链,请先按较低级别 CA 证书,然后是较高级别 CA 证书的顺序排列证书。
多个 CA 的证书可以包含在单个文件中。
TLSCRLFile no 包含证书吊销列表 (CRL) 的 file 的完整路径名。
TLSCertFile yes 包含证书的 file 的完整路径名。
如果使用包含多个成员的证书链,请先按服务器、proxy 或 agent 证书,然后是较低级别 CA 证书,最后是较高级别 CA 证书的顺序排列证书。
TLSKeyFile yes 包含私钥的 file 的完整路径名。
通过设置适当的访问权限,确保此 file 仅可被 2-创建用户账户 读取。
TLSServerCertIssuer no 允许的服务器证书颁发者。
TLSServerCertSubject no 允许的服务器证书主题。

配置示例

设置好必要的证书后,配置 Zabbix 组件以使用基于证书的加密。

以下是配置的详细步骤:

Zabbix服务器

1。准备CA证书文件。

为了验证对等证书,Zabbix server 必须能够访问包含 Top 级别、自签名根CA证书的 file。例如,如果需要来自两个独立根CA的证书,请将它们放置在 /home/zabbix/zabbix_ca_file.crt 的 file 中:

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 server 证书/证书链放入一个文件中,例如,放在 /home/zabbix/zabbix_server.crt。 第一个证书是 Zabbix server 证书,随后是中间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 主题备用名称Netscape 证书类型 扩展,OpenSSL 可能无法建立加密连接。 有关更多信息,请参阅 X.509 v3证书扩展的使用限制

3。将 Zabbix server 私钥放入一个文件中,例如,放在 /home/zabbix/zabbix_server.key

-----BEGIN PRIVATE KEY-----
       MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQC9tIXIJoVnNXDl
       ...
       IJLkhbybBYEf47MLhffWa7XvZTY=
       -----END PRIVATE KEY-----

4。在 Zabbix server configuration file 中编辑TLS配置参数:

TLSCAFile=/home/zabbix/zabbix_ca_file
       TLSCertFile=/home/zabbix/zabbix_server.crt
       TLSKeyFile=/home/zabbix/zabbix_server.key
Zabbix proxy

1。按照Zabbix server章节所述,准备包含Top级CA证书、Zabbix proxy证书/证书链以及私钥的文件。 随后,在Zabbix proxy configuration file中相应编辑TLSCAFileTLSCertFileTLSKeyFile参数。

2。在Zabbix proxy configuration file中编辑其他TLS参数:

  • 主动式proxy:TLSConnect=cert
  • 被动式proxy:TLSAccept=cert

为增强proxy安全性,还可设置TLSServerCertIssuerTLSServerCertSubject参数。 更多信息请参阅限制允许的证书颁发者与主题

最终proxy配置file中的TLS参数示例如下:

TLSConnect=cert
       TLSAccept=cert
       TLSCAFile=/home/zabbix/zabbix_ca_file
       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配置加密:

  • 导航至:管理 → Proxies
  • 选择proxy并点击加密标签页。

下例中已填写颁发者主题字段。 关于为何及如何使用这些字段的详细信息,请参阅限制允许的证书颁发者与主题

主动式proxy配置:

被动式proxy配置:

Zabbix agent

1。按照Zabbix server章节所述,准备包含Top级CA证书、Zabbix agent证书/证书链及私钥的文件。 随后,在Zabbix agent configuration file中相应编辑TLSCAFileTLSCertFileTLSKeyFile参数。

2。在Zabbix agent configuration file中编辑其他TLS参数:

  • 主动式agent:TLSConnect=cert
  • 被动式agent:TLSAccept=cert

为增强agent安全性,可设置TLSServerCertIssuerTLSServerCertSubject参数。 更多信息请参阅限制允许的证书颁发者与主题

最终agent配置file中的TLS参数示例如下。 注意此示例假设主机由proxy监控,因此将其指定为证书主题:

TLSConnect=cert
       TLSAccept=cert
       TLSCAFile=/home/zabbix/zabbix_ca_file
       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。为由此agent监控的主机配置Zabbix前端加密。

  • 前往:数据采集 → 主机
  • 选择主机并点击加密标签页

下例中已填写颁发者主题字段。 关于为何及如何使用这些字段的详细信息,请参阅限制允许的证书颁发者与主题

Zabbix web服务

1。按照Zabbix server章节所述,准备包含Top级CA证书、Zabbix网页服务证书/证书链及私钥的文件。 随后,在Zabbix web service configuration file中相应修改TLSCAFileTLSCertFileTLSKeyFile参数。

2。在Zabbix web service configuration file中编辑额外的TLS参数:TLSAccept=cert

最终网页服务配置file中的TLS参数示例如下:

TLSAccept=cert
       TLSCAFile=/home/zabbix/zabbix_ca_file
       TLSCertFile=/home/zabbix/zabbix_web_service.crt
       TLSKeyFile=/home/zabbix/zabbix_web_service.key

3。通过修改Zabbix server configuration file中的WebServiceURL参数,配置Zabbix server以连接启用TLS的Zabbix网页服务:

WebServiceURL=https://example.com

限制允许的证书颁发者和主题

当两个Zabbix组件(例如server 和 agent)建立TLS连接时,它们会相互验证对方的证书。如果对等方证书由受信任的CA(在TLSCAFile中预配置了Top级证书)签名、有效且未过期,并通过其他检查,则组件之间的通信可以继续进行。在这种最简单的情况下,不会验证证书颁发者和主题。

然而,这会带来风险:任何持有有效证书的人都可以冒充他人(例如,一个主机证书可能被用于冒充服务器)。虽然在证书由专用内部CA签名且冒充风险较低的小型环境中可能可以接受,但在规模较大或对安全性要求更高的环境中可能不够充分。

如果您的Top级CA 问题包含不应被Zabbix接受的证书,或者您想降低冒充风险,可以通过指定允许证书的颁发者和主题来限制可接受的证书。

例如,在Zabbix proxy配置file中,您可以指定:

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 server通信。同样,被动式proxy也不会接受来自此类服务器的请求。

Rules for matching Issuer and Subject strings

IssuerSubject字符串的匹配规则如下:

  • IssuerSubject字符串独立检查,两者均为可选项。
  • 未指定的string表示接受任何string。
  • 字符串按原样比较且必须完全匹配。
  • 支持UTF-8字符,但不支持通配符(*)或正则表达式。
  • 实现了以下RFC 4514要求——需要转义的字符(使用反斜杠'\',U+005C):
    • string中任意位置:'"'(U+0022)、'+'(U+002B)、','(U+002C)、';'(U+003B)、'<'(U+003C)、'>'(U+003E)、'\\'(U+005C);
    • string开头处:空格(' ',U+0020)或井号('#',U+0023);
    • string结尾处:空格(' ',U+0020)。
  • 不支持空字符(U+0000)。若遇到空字符,匹配将失败。
  • 不支持RFC 4517RFC 4518标准。

例如,若IssuerSubject组织(O)字符串包含尾部空格,且Subject组织单元(OU)的string包含双引号,则这些字符必须进行转义:

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)开始,经过中间层级字段(OUO),最后到最高层级字段(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默认以Top层级到低层级的顺序显示IssuerSubject字符串。 在以下示例中,IssuerSubject字段从Top层级(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正确格式化IssuerSubject字符串,请使用以下选项调用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 证书时,某些扩展可能未被完全支持,或可能导致不一致的行为。

主题备用名称扩展

Zabbix 不支持 Subject Alternative Name 扩展,该扩展用于指定替代的 DNS 名称,例如 IP 地址或电子邮件地址。 Zabbix 只能验证证书的 Subject 字段中的值(参见 限制允许的证书颁发者和主题)。 如果证书包含 subjectAltName 字段,则证书验证的结果可能会因用于编译 Zabbix 组件的具体加密工具包而有所不同。 结果是,Zabbix 可能根据这些组合选择接受或拒绝证书。

扩展密钥用法扩展

Zabbix 支持 扩展密钥用法(Extended Key Usage) 扩展功能。 但是,如果使用的话,通常需要同时指定 clientAuth(用于 TLS WWW 客户端认证)和 serverAuth(用于 TLS WWW 服务器认证)属性。 例如:

  • 在被动检查中,当 Zabbix agent 作为 TLS 服务器运行时,serverAuth 属性必须包含在 agent 的证书中。
  • 对于主动检查,其中 agent 作为 TLS 客户端运行,clientAuth 属性必须包含在 agent 的证书中。

虽然 GnuTLS 可能会因密钥使用冲突而问题发出警告,但它通常允许通信继续进行,即使存在这些警告。

名称约束扩展

不同加密工具包对名称约束(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 file 仅在 Zabbix 启动时加载。
update CRL,请重启 Zabbix。

如果 Zabbix 组件是使用 OpenSSL 编译的并且使用了 CRL,请确保证书链中的每个 Top 级别和中间 CA 都在 TLSCRLFile 中包含相应的 CRL(即使它是空的)。