1 使用证书

    概览

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

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

    证书配置参数

    在Zabbix server上配置证书

    1. 为了验证对等证书,Zabbix server必须具有使用其顶级自签名根CA证书的文件访问权限。例如,如果我们期望来自两个独立根CA的证书,我们可以将其证书放入文件中 :

    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. Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
    31. Subject Public Key Info:
    32. Public Key Algorithm: rsaEncryption
    33. Public-Key: (2048 bit)
    34. X509v3 extensions:
    35. X509v3 Key Usage: critical
    36. Certificate Sign, CRL Sign
    37. X509v3 Basic Constraints: critical
    38. CA:TRUE, pathlen:0
    39. ...
    40. -----BEGIN CERTIFICATE-----
    41. MIID4TCCAsmgAwIBAgIBAjANBgkqhkiG9w0BAQUFADB+MRMwEQYKCZImiZPyLGQB
    42. ...
    43. dyCeWnvL7u5sd6ffo8iRny0QzbHKmQt/wUtcVIvWXdMIFJM0Hw==
    44. -----END 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配置相应。 编辑参数TLSCAFileTLSCertFileTLSKeyFile在proxy配置相应。

    2. 对于主动模式proxy 编辑TLSConnect参数:

    1. TLSConnect=cert

    对于被动模式proxy编辑TLSAccept参数:

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

    4. 在最终的代理配置文件中,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. TLSCertFile=/home/zabbix/zabbix_proxy.crt
    6. TLSKeyFile=/home/zabbix/zabbix_proxy.key

    5. 在Zabbix前端配置此proxy的加密:

    • 转到:管理→agent代理程序(proxies)
    • 选择代理,然后单击加密选项卡

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

    主动模式proxy

    被动模式proxy

    Zabbix agent配置基于证书的加密

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

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

    1. TLSConnect=cert

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

    1. TLSAccept=cert

    3.现在,您有一个基于证书的最小agent配置。您可能希望通过设置TLSServerCertIssuerTLSServerCertSubject参数提高agent安全性。(请参阅)。

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

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

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

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

    • 前往: Configuration → Hosts
    • 选择主机然后点击加密 选项卡

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

    agent_config.png

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

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

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

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

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

    有关发行者或主体字符串匹配的说明:

    1. 独立检查发行者和主体字符串。两者都是可选的。
    2. 允许使用UTF-8字符。
    3. 未指定的字符串等同于任何字符串都被接受。
    4. 字符串按“原样”比较,它们必须完全一致才能匹配。
    5. 不支持通配符和正则表达式。
    6. 仅实现了RFC 4514轻量级目录访问协议(LDAP):可区分名称的字符串表示中的一些要求:
      1. 转义字符 ‘“‘ (U+0022), ‘+’ U+002B, ‘,’ U+002C, ‘;’ U+003B, ‘<’ U+003C, ‘>’ U+003E, ‘\‘ U+005C 在字符串中的任何地方。
      2. 字符串开头的转义字符空格(‘ ‘ U+0020)或数字符号(‘#’ U+0023)。
      3. 转义字符空间(‘ ‘ U+0020)在字符串的结尾。
    7. 如果遇到空字符(U+0000) (允许),则匹配失败。
    8. 由于工作量太大,不支持RFC 4517轻量级目录访问协议(LDAP):语法和匹配规则和的要求。

    颁发者和主题字符串中的字段顺序和格式都很重要! 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. $ openssl x509 -noout -text -in /home/zabbix/zabbix_proxy.crt
    5. Certificate:
    6. ...
    7. Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
    8. ...
    9. Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Zabbix proxy

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

    要获得在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

    现在字符串字段是倒序的,字段是用逗号分隔的,可以在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*在违规使用情况下发出警告,但允许通信进行。

    证书撤销列表(CRL)

    如果证书被破坏,CA可以通过将其包含在CRL中来撤销它。 CRLs 可以通过“TLSCRLFile”参数在server、proxy和agent配置文件中配置。 例如:

    1. TLSCRLFile=/home/zabbix/zabbix_crl_file

    其中’ zabbix_crl_file ‘可能包含来自多个CAs的CRLs,如下所示:

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

    如果Zabbix组件是用OpenSSL编译的,并且使用了CRLs,那么证书链中的每个顶级和中级CA必须在’ TLSCRLFile’中有一个对应的CRL(可以为空)。