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 组件以使用基于证书的加密。
以下是配置的详细步骤:
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
1。按照Zabbix server章节所述,准备包含Top级CA证书、Zabbix proxy证书/证书链以及私钥的文件。 随后,在Zabbix proxy configuration file中相应编辑TLSCAFile
、TLSCertFile
和TLSKeyFile
参数。
2。在Zabbix proxy configuration file中编辑其他TLS参数:
TLSConnect=cert
TLSAccept=cert
为增强proxy安全性,还可设置TLSServerCertIssuer
和TLSServerCertSubject
参数。 更多信息请参阅限制允许的证书颁发者与主题。
最终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配置加密:
下例中已填写颁发者和主题字段。 关于为何及如何使用这些字段的详细信息,请参阅限制允许的证书颁发者与主题。
主动式proxy配置:
被动式proxy配置:
1。按照Zabbix server章节所述,准备包含Top级CA证书、Zabbix agent证书/证书链及私钥的文件。 随后,在Zabbix agent configuration file中相应编辑TLSCAFile
、TLSCertFile
和TLSKeyFile
参数。
2。在Zabbix agent configuration file中编辑其他TLS参数:
TLSConnect=cert
TLSAccept=cert
为增强agent安全性,可设置TLSServerCertIssuer
和TLSServerCertSubject
参数。 更多信息请参阅限制允许的证书颁发者与主题。
最终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前端加密。
下例中已填写颁发者和主题字段。 关于为何及如何使用这些字段的详细信息,请参阅限制允许的证书颁发者与主题。
1。按照Zabbix server章节所述,准备包含Top级CA证书、Zabbix网页服务证书/证书链及私钥的文件。 随后,在Zabbix web service configuration file中相应修改TLSCAFile
、TLSCertFile
和TLSKeyFile
参数。
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网页服务:
当两个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也不会接受来自此类服务器的请求。
Issuer
and Subject
stringsIssuer
与Subject
字符串的匹配规则如下:
Issuer
和Subject
字符串独立检查,两者均为可选项。*
)或正则表达式。\
',U+005C):
"
'(U+0022)、'+
'(U+002B)、',
'(U+002C)、';
'(U+003B)、'<
'(U+003C)、'>
'(U+003E)、'\\
'(U+005C);#
',U+0023);例如,若Issuer
和Subject
组织(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
)开始,经过中间层级字段(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默认以Top层级到低层级的顺序显示Issuer
和Subject
字符串。 在以下示例中,Issuer
和Subject
字段从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正确格式化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
在 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 服务器认证)属性。 例如:
虽然 GnuTLS 可能会因密钥使用冲突而问题发出警告,但它通常允许通信继续进行,即使存在这些警告。
名称约束扩展
不同加密工具包对名称约束(Name Constraints)扩展的支持各不相同。 请确保您选择的工具包支持此扩展。 此扩展可能会限制Zabbix加载CA证书,如果此部分被标记为关键部分,则取决于所使用的特定工具包。
如果证书遭到泄露,证书颁发机构(CA)可以通过在证书吊销列表(CRL)中包含该证书来吊销它。
CRL 通过配置文件进行管理,并且可以在服务器、proxy 和 agent 的配置文件中使用 TLSCRLFile
参数进行指定。
例如:
在这种情况下,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(即使它是空的)。