1 使用证书

概述

Zabbix可以使用PEM格式的RSA证书,由公共或内部认证机构(CA)签名。根据预先配置的CA证书进行证书验证。不支持自签名证书。可以选择使用证书撤销列表(CRL)。每个Zabbix组件只能配置一个证书。

有关如何设置和操作内部CA的更多信息,如何生成证书请求并签名,如何撤销证书,您可以找到许多在线操作,例如OpenSSL PKI Tutorial v1.1

仔细考虑和测试证书扩展 - 请参阅使用X.509 v3证书扩展的限制

证书配置参数

参数Mandatory描述
TLSCAFile 包含用于对等证书验证的顶级CA证书的文件的完整路径名。在具有多个成员的证书链的情况下,它们必须被排序:较低级别的CA证书,然后是较高级别的CA证书。来自多个CA的证书可以包含在单个文件中。
TLSCRLFile 包含证书吊销列表的文件的完整路径名。见证书吊销清单(CRL)中的注释。Certificate Revocation Lists (CRL).
TLSCertFile 包含证书(证书链)的文件的完整路径名。设置此文件的访问权限 - 它必须只能由Zabbix用户读取。在具有多个成员的证书链的情况下,必须首先对其进行排序:服务器,proxy或agent证书,其次是较低级别的CA证书,然后是较高级别CA的证书。
TLSKeyFile * 包含私钥的文件的完整路径名。设置此文件的访问权限 - 它必须只能由Zabbix用户读取。
TLSServerCertIssuer 允许的服务器证书发行者(issuer)。
TLSServerCertSubject允许的服务器证书主体(subject)。

在Zabbix server上配置证书

  1. 为了验证对等证书,Zabbix server必须具有使用其顶级自签名根CA证书的文件访问权限。例如,如果我们期望来自两个独立根CA的证书,我们可以将其证书放入文件中 /home/zabbix/zabbix_ca_file
  1. Certificate:
  2. Data:
  3. Version: 3 (0x2)
  4. Serial Number: 1 (0x1)
  5. Signature Algorithm: sha1WithRSAEncryption
  6. Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
  7. ...
  8. Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
  9. Subject Public Key Info:
  10. Public Key Algorithm: rsaEncryption
  11. Public-Key: (2048 bit)
  12. ...
  13. X509v3 extensions:
  14. X509v3 Key Usage: critical
  15. Certificate Sign, CRL Sign
  16. X509v3 Basic Constraints: critical
  17. CA:TRUE
  18. ...
  19. -----BEGIN CERTIFICATE-----
  20. MIID2jCCAsKgAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MRMwEQYKCZImiZPyLGQB
  21. ....
  22. 9wEzdN8uTrqoyU78gi12npLj08LegRKjb5hFTVmO
  23. -----END CERTIFICATE-----
  24. Certificate:
  25. Data:
  26. Version: 3 (0x2)
  27. Serial Number: 1 (0x1)
  28. Signature Algorithm: sha1WithRSAEncryption
  29. Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root2 CA
  30. ...
  31. Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root2 CA
  32. Subject Public Key Info:
  33. Public Key Algorithm: rsaEncryption
  34. Public-Key: (2048 bit)
  35. ....
  36. X509v3 extensions:
  37. X509v3 Key Usage: critical
  38. Certificate Sign, CRL Sign
  39. X509v3 Basic Constraints: critical
  40. CA:TRUE
  41. ....
  42. -----BEGIN CERTIFICATE-----
  43. MIID3DCCAsSgAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MRMwEQYKCZImiZPyLGQB
  44. ...
  45. vdGNYoSfvu41GQAR5Vj5FnRJRzv5XQOZ3B6894GY1zY=
  46. -----END CERTIFICATE-----

2.将Zabbix服务器证书链放入文件中,例如/home/zabbix/zabbix_server.crt

  1. Certificate:
  2. Data:
  3. Version: 3 (0x2)
  4. Serial Number: 1 (0x1)
  5. Signature Algorithm: sha1WithRSAEncryption
  6. Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
  7. ...
  8. Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Zabbix server
  9. Subject Public Key Info:
  10. Public Key Algorithm: rsaEncryption
  11. Public-Key: (2048 bit)
  12. ...
  13. X509v3 extensions:
  14. X509v3 Key Usage: critical
  15. Digital Signature, Key Encipherment
  16. X509v3 Basic Constraints:
  17. CA:FALSE
  18. ...
  19. -----BEGIN CERTIFICATE-----
  20. MIIECDCCAvCgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgTETMBEGCgmSJomT8ixk
  21. ...
  22. h02u1GHiy46GI+xfR3LsPwFKlkTaaLaL/6aaoQ==
  23. -----END CERTIFICATE-----
  24. Certificate:
  25. Data:
  26. Version: 3 (0x2)
  27. Serial Number: 2 (0x2)
  28. Signature Algorithm: sha1WithRSAEncryption
  29. Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
  30. ...
  31. Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
  32. Subject Public Key Info:
  33. Public Key Algorithm: rsaEncryption
  34. Public-Key: (2048 bit)
  35. ...
  36. X509v3 extensions:
  37. X509v3 Key Usage: critical
  38. Certificate Sign, CRL Sign
  39. X509v3 Basic Constraints: critical
  40. CA:TRUE, pathlen:0
  41. ...
  42. -----BEGIN CERTIFICATE-----
  43. MIID4TCCAsmgAwIBAgIBAjANBgkqhkiG9w0BAQUFADB+MRMwEQYKCZImiZPyLGQB
  44. ...
  45. dyCeWnvL7u5sd6ffo8iRny0QzbHKmQt/wUtcVIvWXdMIFJM0Hw==
  46. -----END CERTIFICATE-----

Here the first is Zabbix server certificate, followed by intermediate CA certificate.

这里首先是Zabbix server证书,其次是中间CA证书。

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

  1. -----BEGIN PRIVATE KEY-----
  2. MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQC9tIXIJoVnNXDl
  3. ...
  4. IJLkhbybBYEf47MLhffWa7XvZTY=
  5. -----END PRIVATE KEY-----

4.在Zabbix server配置文件中编辑TLS参数,如下所示:

  1. TLSCAFile=/home/zabbix/zabbix_ca_file
  2. TLSCertFile=/home/zabbix/zabbix_server.crt
  3. TLSKeyFile=/home/zabbix/zabbix_server.key

为Zabbix proxy配置基于证书的加密

1.使用顶级CA证书,proxy证书(链)和私钥准备文件,如在Zabbix server上配置证书中所述。编辑参数TLSCAFileTLSCertFileTLSKeyFile在proxy配置相应。

2.对于proxy 代理编辑TLSConnect参数:

  1. TLSConnect=cert

对于被动proxy编辑TLSAccept参数:

  1. TLSAccept=cert

3.现在你有一个基于证书的最小proxy配置。您可能希望通过设置TLSServerCertIssuerTLSServerCertSubject参数来提高proxy安全性(请参阅限制允许的证书发行者和主体)。

4.在最终的proxy配置文件中,TLS参数可能如下所示:

  1. TLSConnect=cert
  2. TLSAccept=cert
  3. TLSCAFile=/home/zabbix/zabbix_ca_file
  4. TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
  5. TLSServerCertSubject=CN=Zabbix server,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
  6. TLSCertFile=/home/zabbix/zabbix_proxy.crt
  7. TLSKeyFile=/home/zabbix/zabbix_proxy.key
  1. 在Zabbix前端配置此proxy的加密:
  • 转到:管理→agent代理程序(proxies)

  • 选择代理,然后单击加密选项卡

在下面的示例中,发行者(Issuer)和主体(fields)字段填写 - 请参阅[manual:encryption/using_certificates#restricting_allowed_certificate_issuer_and_subject|限制允许的证书发行者和主体]]为什么以及如何使用这些字段。

对于主动proxy

1  使用证书 - 图1

对于被动proxy

1  使用证书 - 图2

为Zabbix agent配置基于证书的加密

1.使用顶级CA证书,代理证书(链)和私钥准备文件,如在Zabbix server配置证书中所述。编辑参数TLSCAFileTLSCertFileTLSKeyFile在agent配置相应。

  1. For active checks edit TLSConnect parameter:

2.对于主动检查编辑TLSConnect参数:

  1. TLSConnect=cert

对于被动检查编辑TLSAccept参数:

  1. TLSAccept=cert

3.现在,您有一个基于证书的最小agent配置。您可能希望通过设置TLSServerCertIssuerTLSServerCertSubject参数提高agent安全性。(请参阅限制允许的证书发行者和主体)。

4.在最终agent配置文件中,TLS参数可能如下所示:

  1. TLSConnect=cert
  2. TLSAccept=cert
  3. TLSCAFile=/home/zabbix/zabbix_ca_file
  4. TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
  5. TLSServerCertSubject=CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
  6. TLSCertFile=/home/zabbix/zabbix_agentd.crt
  7. TLSKeyFile=/home/zabbix/zabbix_agentd.key

(例如,假设主机是通过proxy监视的,因此是proxy证书主体。)

5.在Zabbix前端为此agent配置加密:

  • Go to: Configuration → Hosts

  • 转到:配置→主机

  • Select host and click on Encryption tab

  • 选择主机,然后单击加密选项卡

在下面的示例中,发行者和主体字段填写 - 请参阅限制允许的证书发行者和主体为什么以及如何使用这些字段。

1  使用证书 - 图3

限制允许的证书发行者和主体

当两个Zabbix组件(例如服务器和agent)建立TLS连接时,他们会检查对方的证书。如果对等证书由受信任的CA(具有预先配置的顶级证书TLSCAFile)签名,则是有效的和尚未过期,并通过一些其他检查,则可以进行通信。在最简单的情况下,不会检查证书发行者和主体。

这是一个风险 - 任何拥有有效证书的人都可以冒充任何人(例如,主机证书可以用来模拟服务器)。在通过专门的内部CA签署证书的小型环境中,这可能是可以接受的,并且冒充的风险较低。

如果您你的顶级CA用于发布不应被Zabbix接受的其他证书,或者你想降低冒充风险,您可以通过指定其发行者(Issuer)和主体(Subject)字符串来限制允许的证书。

例如,您可以在Zabbix proxy配置文件中写:

  1. TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
  2. TLSServerCertSubject=CN=Zabbix server,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com

通过这些设置,主动proxy将不会与证书中具有不同发行者或主体字符串的Zabbix server通信,被动proxy将不接受来自此类服务器的请求。

有关发行者或主体字符串匹配的几个注释:

发行者和主体字符串和格式的字段顺序很重要!Zabbix遵循 RFC 4514建议,并使用“反向”字段顺序。

反向顺序可以举例说明:

  1. TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
  2. TLSServerCertSubject=CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com

请注意,它以低位(CN)开始,进入中级(OU,O)并以顶级(DC)字段结束。

默认情况下,OpenSSL将以“正常”的顺序显示证书发行者和主体字段,具体取决于使用的其他选项:

  1. $ openssl x509 -noout -in /home/zabbix/zabbix_proxy.crt -issuer -subject
  2. issuer= /DC=com/DC=zabbix/O=Zabbix SIA/OU=Development group/CN=Signing CA
  3. subject= /DC=com/DC=zabbix/O=Zabbix SIA/OU=Development group/CN=Zabbix proxy
  4.  
  5. $ openssl x509 -noout -text -in /home/zabbix/zabbix_proxy.crt
  6. Certificate:
  7. ...
  8. Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
  9. ...
  10. Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Zabbix proxy

这里发行者和主体字符串从顶级(DC)开始,以低级(CN)字段结尾,空格和字段分隔符取决于所使用的选项。这些值都不会匹配Zabbix发行者(Issuer)和主体(Subject)字段!

要获得适当的发行者和主体字符串可用于Zabbix使用特殊选项调用\OpenSSL-nameopt esc_2253,esc_ctrl,utf8,dump_nostr,dump_unknown,dump_der,sep_comma_plus,dn_rev,sname

  1. $ openssl x509 -noout -issuer -subject \
  2. -nameopt esc_2253,esc_ctrl,utf8,dump_nostr,dump_unknown,dump_der,sep_comma_plus,dn_rev,sname \
  3. -in /home/zabbix/zabbix_proxy.crt
  4. issuer= CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
  5. subject= CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com

现在字符串字段是反序,字段是逗号分隔的,可以在Zabbix配置文件和前端使用。

使用X.509 v3证书扩展的限制

  • 主体备用名称(subjectAltName扩展名。 Zabbix不支持来自subjectAltName扩展名的替代主体名称(如IP地址,电子邮件地址)。只能在Zabbix中检查“主体”字段的值(请参阅限制允许的证书发行者和主体)。 如果证书使用subjectAltName扩展名,那么结果取决于加密工具包的特定组合。Zabbix组件被编译(可能工作或不工作,Zabbix可能拒绝接受来自对等体的证书)

  • 扩展密钥使用扩展。如果使用,则通常需要clientAuth(TLS WWW客户端身份验证)和serverAuth(TLS WWW服务器身份验证)。例如,被动检查的zabbix agent是作为TLS服务器,所以serverAuth必须在agent证书设置。对于主动检查agent证书需要clientAuth进行设置。GnuTLS在违规使用情况下发出警告,但允许通信进行。

  • 名称限制扩展。并不是所有的加密工具包都支持它。此扩展可能会阻止Zabbix加载CA证书,此部分被标记为关键(critical)(取决于特定的加密工具包)。

证书撤销清单(CRL)

如果证书受到威胁,CA可以通过在CRL中包含来撤销证书。可以在server器,proxy和agent的配置文件中配置CRL TLSCRLFile。例如:

  1. TLSCRLFile=/home/zabbix/zabbix_crl_file

where zabbix_crl_file may contain CRLs from several CAs and look like:

那里zabbix_crl_file可能包含几个CA的CRL,如下所示

  1. -----BEGIN X509 CRL-----
  2. MIIB/DCB5QIBATANBgkqhkiG9w0BAQUFADCBgTETMBEGCgmSJomT8ixkARkWA2Nv
  3. ...
  4. treZeUPjb7LSmZ3K2hpbZN7SoOZcAoHQ3GWd9npuctg=
  5. -----END X509 CRL-----
  6. -----BEGIN X509 CRL-----
  7. MIIB+TCB4gIBATANBgkqhkiG9w0BAQUFADB/MRMwEQYKCZImiZPyLGQBGRYDY29t
  8. ...
  9. CAEebS2CND3ShBedZ8YSil59O6JvaDP61lR5lNs=
  10. -----END X509 CRL-----

CRL文件仅在Zabbix启动时加载。CRL更新需要重新启动。

如果使用OpenSSL编译Zabbix组件,要使用CRL,则证书链中的每个顶级和中级CA都必须具有相应的CRL(可以为空)TLSCRLFile

使用CRL扩展的限制

  • 权限密钥标识符扩展。 具有相同名称的CA的CRL在mbedTLSPolarSSL)的情况下可能不起作用,即使使用“权限密钥标识符”扩展。