[comment]: # translation:outdated

[comment]: # ({a2466f6d-09d7d659})
# 1 使用证书

[comment]: # ({/a2466f6d-09d7d659})

[comment]: # ({78f83f86-685d1488})
#### Overview

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

有关如何设置和操作内部CA的更多信息，如何生成证书请求并签名，如何撤销证书，您可以找到许多在线操作，例如[OpenSSL
PKI Tutorial v1.1](http://pki-tutorial.readthedocs.org/en/latest/)。

仔细考虑和测试证书扩展 - 请参阅 [使用X.509
v3证书扩展的限制](/zh/manual/encryption/using_certificates?&#limitations_on_using_x509_v3_certificate_extensions).

[comment]: # ({/78f83f86-685d1488})

[comment]: # ({0ce52f63-a572d979})
#### 证书配置参数

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

[comment]: # ({/0ce52f63-a572d979})

[comment]: # ({c6eba4f9-34bcf646})
#### 在Zabbix server上配置证书

1\. 为了验证对等证书，Zabbix
server必须具有使用其顶级自签名根CA证书的文件访问权限。例如，如果我们期望来自两个独立根CA的证书，我们可以将其证书放入文件中
`/home/zabbix/zabbix_ca_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服务器证书链放入文件中，例如`/home/zabbix/zabbix_server.crt`:

    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-----

先放入Zabbix server证书，随后是中间CA的证书。

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

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

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

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

[comment]: # ({/c6eba4f9-34bcf646})

[comment]: # ({b54d30f8-54ac87c7})
#### Zabbix proxy配置基于证书的加密

1.使用顶级CA证书，proxy证书（链）和私钥准备文件，如在[Zabbix
server上配置证书](/zh/manual/encryption/using_certificates#configuring_certificate_on_zabbix_server)中所述。编辑参数`TLSCAFile`，`TLSCertFile`，
`TLSKeyFile`在proxy配置相应。

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

    TLSConnect=cert

对于被动proxy编辑`TLSAccept`参数：

    TLSAccept=cert

3.现在你有一个基于证书的最小proxy配置。您可能希望通过设置`TLSServerCertIssuer`和`TLSServerCertSubject`参数来提高proxy安全性（请参阅[限制允许的证书发行者和主体](/zh/manual/encryption/using_certificates#restricting_allowed_certificate_issuer_and_subject)）。

4.在最终的proxy配置文件中，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

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

-   转到：*管理→agent代理程序(proxies)*
-   选择代理，然后单击**加密**选项卡

在下面的示例中，发行者(Issuer)和主体(fields)字段填写 -
请参阅\[zh:manual:encryption/using\_certificates\#restricting\_allowed\_certificate\_issuer\_and\_subject|限制允许的证书发行者和主体\]\]为什么以及如何使用这些字段。

对于主动proxy

![proxy\_active\_cert.png](../../../assets/zh/manual/encryption/proxy_active_cert.png)

对于被动proxy

![proxy\_passive\_cert.png](../../../assets/zh/manual/encryption/proxy_passive_cert.png)

[comment]: # ({/b54d30f8-54ac87c7})

[comment]: # ({77f0b135-d2f8a033})
#### Zabbix agent配置基于证书的加密

1.使用顶级CA证书，代理证书（链）和私钥准备文件，如在[Zabbix
server配置证书](/zh/manual/encryption/using_certificates#configuring_certificate_on_zabbix_server)中所述。编辑参数`TLSCAFile`，`TLSCertFile`，`TLSKeyFile`在agent配置相应。

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

    TLSConnect=cert

对于被动检查编辑`TLSAccept`参数：

    TLSAccept=cert

3.现在，您有一个基于证书的最小agent配置。您可能希望通过设置`TLSServerCertIssuer`和`TLSServerCertSubject`参数提高agent安全性。（请参阅[限制允许的证书发行者和主体](/zh/manual/encryption/using_certificates#restricting_allowed_certificate_issuer_and_subject)）。

4.在最终agent配置文件中，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 proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
    TLSCertFile=/home/zabbix/zabbix_agentd.crt
    TLSKeyFile=/home/zabbix/zabbix_agentd.key

（例如，假设主机是通过proxy监视的，因此是proxy证书主体。）

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

-   Go to: *Configuration → Hosts*
-   转到：*配置→主机*
-   Select host and click on **Encryption** tab
-   选择主机，然后单击**加密**选项卡

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

![agent\_config.png](../../../assets/zh/manual/encryption/agent_config.png)

[comment]: # ({/77f0b135-d2f8a033})

[comment]: # ({71abba65-0f34d758})
#### 限制允许的证书发行者和主体

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

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

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

例如，您可以在Zabbix proxy配置文件中写：

    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将不接受来自此类服务器的请求。

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

1.  独立检查发行者和主体字符串。两者都是可选的。
2.  允许使用UTF-8字符。
3.  未指定的字符串等同于任何字符串都被接受。
4.  字符串按“原样”比较，它们必须完全一致才能匹配。
5.  不支持通配符和正则表达式。
6.  只有[RFC
    4514轻量级目录访问协议（LDAP）的一些要求：实现了可分辨名称](http://tools.ietf.org/html/rfc4514)的字符串表示：

```{=html}
<!-- -->
```
        - 转义字符'"' (U+0022), '+' U+002B, ',' U+002C, ';' U+003B, '<' U+003C, '>' U+003E, '\' U+005C 在字符串中的任何地方。
        - 字符串开头处的转义字符空格(' ' U+0020) 或数字符号 ('#' U+0023)。
        - 字符串末尾的转义字符空间(' ' U+0020) 。
    - 如果遇到空字符(U+0000)（[[http://tools.ietf.org/html/rfc4514|RFC 4514]]允许），则匹配失败。
    - 要求[[http://tools.ietf.org/html/rfc4517|RFC 4517轻量级目录访问协议（LDAP）：句法和匹配规则]]和 [[http://tools.ietf.org/html/rfc4518|RFC 4518轻量级目录访问协议（LDAP）：国际化字符串准备]]，由于所需的工作量不支持。

发行者和主体的内容格式及字段顺序很重要！Zabbix遵循 [RFC
4514](http://tools.ietf.org/html/rfc4514)建议，并使用“反向”字段顺序。

反向顺序可以举例说明：

    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

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

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

    $ 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

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

::: noteimportant

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

:::

    $ 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
    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配置文件和前端使用。

[comment]: # ({/71abba65-0f34d758})

[comment]: # ({d8e34099-29732466})
#### 使用X.509 v3证书扩展的限制

-   **主体备用名称（*subjectAltName*）**扩展名。\
    Zabbix不支持来自*subjectAltName*扩展名的替代主体名称（如IP地址，电子邮件地址）。只能在Zabbix中检查“主体”字段的值（请参阅[限制允许的证书发行者和主体](/manual/encryption/using_certificates#restricting_allowed_certificate_issuer_and_subject)）。\
    如果证书使用*subjectAltName*扩展名，那么结果取决于加密工具包的特定组合。Zabbix组件被编译（可能工作或不工作，Zabbix可能拒绝接受来自对等体的证书）
-   **扩展密钥使用**扩展。\
    如果使用，则通常需要*clientAuth*（TLS
    WWW客户端身份验证）和*serverAuth*（TLS WWW服务器身份验证）。\
    例如，被动检查的zabbix
    agent是作为TLS服务器，所以*serverAuth*必须在agent证书设置。对于主动检查agent证书需要*clientAuth*进行设置。\
    *GnuTLS*在违规使用情况下发出警告，但允许通信进行。
-   **名称限制**扩展。\
    并不是所有的加密工具包都支持它。此扩展可能会阻止Zabbix加载CA证书，此部分被标记为*关键(critical)*（取决于特定的加密工具包）。

[comment]: # ({/d8e34099-29732466})

[comment]: # ({62435a7a-35b25767})
#### 证书撤销清单（CRL）

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

    TLSCRLFile=/home/zabbix/zabbix_crl_file

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

`zabbix_crl_file`可能包含几个CA的CRL，如下所示

    -----BEGIN X509 CRL-----
    MIIB/DCB5QIBATANBgkqhkiG9w0BAQUFADCBgTETMBEGCgmSJomT8ixkARkWA2Nv
    ...
    treZeUPjb7LSmZ3K2hpbZN7SoOZcAoHQ3GWd9npuctg=
    -----END X509 CRL-----
    -----BEGIN X509 CRL-----
    MIIB+TCB4gIBATANBgkqhkiG9w0BAQUFADB/MRMwEQYKCZImiZPyLGQBGRYDY29t
    ...
    CAEebS2CND3ShBedZ8YSil59O6JvaDP61lR5lNs=
    -----END X509 CRL-----

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

::: noteimportant

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

:::

#### 使用CRL扩展的限制

-   **权限密钥标识符**扩展。\
    具有相同名称的CA的CRL在*mbedTLS*（*PolarSSL*）的情况下可能不起作用，即使使用“权限密钥标识符”扩展。

[comment]: # ({/62435a7a-35b25767})
