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证书/证书链以及私钥。 然后,相应地编辑 TLSCAFileTLSCertFileTLSKeyFile 参数,具体请参见 Zabbix proxy configuration file

2。编辑 Zabbix proxy configuration file 中的额外TLS参数:

  • 对于主动模式的 proxy:TLSConnect=cert
  • 对于被动式 proxy:TLSAccept=cert

::: noteclassic 为提高 proxy 安全性,您还可以设置 TLSServerCertIssuerTLSServerCertSubject 参数。 有关更多信息,请参见限制允许的证书颁发者和主题。 仅返回OutputFormat格式要求结果

最终 proxy 配置 file 中的 TLS 参数可能如下所示:

输出结果:仅返回OutputFormat格式要求结果

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 仅返回OutputFormat格式要求结果 3。在Zabbix前端为此proxy配置加密:

  • 转到:管理 → Proxies
  • 选择 proxy 并点击 加密 选项卡。

在下面的示例中,颁发者主题 字段已填写。 有关为何以及如何使用这些字段的更多信息,请参见限制允许的证书颁发者和主题

对于主动 proxy:

被动 proxy:

Zabbix agent

1。按照Zabbix server章节中的描述,准备好Top级别的CA证书、Zabbix agent证书/证书链以及私钥。 然后,相应地编辑 TLSCAFileTLSCertFileTLSKeyFile 参数,具体请参见 Zabbix agent configuration file

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

  • 对于主动模式的 agent:TLSConnect=cert
  • 对于被动模式的 agent:TLSAccept=cert

::: noteclassic 为提高 agent 安全性,您可以设置 TLSServerCertIssuerTLSServerCertSubject 参数。 有关更多信息,请参见限制允许的证书颁发者和主题。 仅返回OutputFormat格式要求结果

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

输出结果:仅返回OutputFormat格式要求结果

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 仅返回OutputFormat格式要求结果 3。为此 agent 所监控的 主机 配置 Zabbix 前端加密。

  • 转到:数据收集 → 主机
  • 选择 主机 并点击 加密 选项卡。

在下面的示例中,颁发者主题 字段已填写。 有关为何以及如何使用这些字段的更多信息,请参见限制允许的证书颁发者和主题

Zabbix web服务

1。按照Zabbix server章节中的描述,准备好包含Top级CA证书、Zabbix Web服务证书/证书链以及私钥的文件。 然后,相应地编辑 TLSCAFile、TLSCertFile 和 TLSKeyFile 参数,具体请参见 Zabbix web service configuration file

2。在 Zabbix web service configuration file 中编辑另一个 TLS 参数:TLSAccept=cert

最终的 Web 服务配置中的 TLS 参数 file 可能如下所示:

xxx TLSAccept=cert TLSCAFile=/home/zabbix/zabbix_ca_file TLSCertFile=/home/zabbix/zabbix_web_service.crt TLSKeyFile=/home/zabbix/zabbix_web_service.key 仅返回OutputFormat格式要求结果 3。通过编辑 Zabbix server configuration file 中的 WebServiceURL 参数,配置 Zabbix server 以连接到配置了 TLS 的 Zabbix Web 服务:

输出结果:仅返回OutputFormat格式要求结果

WebServiceURL=https://example.com 仅返回OutputFormat格式要求结果

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

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

但是,这也存在风险:任何拥有有效证书的人都可以冒充他人(例如,一个主机 证书可以用于冒充服务器)。 虽然这在小型环境中可能是可以接受的,在这种环境中证书由专用的内部CA签名且冒充风险较低,但在更大或更注重安全性的环境中可能不够充分。

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

例如,在 Zabbix proxy 配置文件中,你可以指定:

输出结果:仅返回OutputFormat格式要求结果

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 仅返回OutputFormat格式要求结果 通过这些设置,一个主动的proxy将不会与Zabbix server证书具有不同颁发者或主题的进行通信。 同样,被动的 proxy 将不会接受来自此类服务器的请求。

{HEADER_94917353}

匹配 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(即使它是空的)。