[comment]: # translation:outdated

[comment]: # ({0041e8b0-14d0ad91})
# - \#2 使用共享密钥

[comment]: # ({/0041e8b0-14d0ad91})

[comment]: # ({bb22d630-3935bdee})
#### 概述

Zabbix中的每个共享密钥（PSK）实际上是一对：

-   非秘密PSK identity（共享密钥一致性）字符串，
-   秘密PSK字符串值。

PSK identity（共享密钥一致性）字符串是非空的UTF-8字符串。

例如，“PSK ID 001 Zabbix
agentd”。这是一个独特的名称，由Zabbix组件引用该特定的PSK。不要将敏感信息放在PSK
identity（共享密钥一致性）字符串中 - 它通过网络未加密传输。

PSK值很难猜出十六进制数字的字符串，例如“e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9”。

[comment]: # ({/bb22d630-3935bdee})

[comment]: # ({545575bf-dcbe370b})
#### 大小限制

在Zabbix中有PSK
identity（共享密钥一致性）和PSK值的大小限制，在某些情况下，加密库可以有下限：

|组件                    P|K identity最大大小                       PSK值最|大小                                             PSK值最大大小|<|
|---------------------------|------------------------------------------------------|---------------------------------------------------------------------|-|
|*Zabbix*|128 UTF-8 characters|128-bit (16-byte PSK, entered as 32 hexadecimal digits)|2048-bit (256-byte PSK, entered as 512 hexadecimal digits)|
|*Zabbix*|128个UTF-8字符                             12|位（16字节PSK，输入32位十六进制数字）                  2048位（256字节PSK，输入|12个十六进制数字）|
|*GnuTLS*|128 bytes (may include UTF-8 characters)|\-|2048-bit (256-byte PSK, entered as 512 hexadecimal digits)|
|*GnuTLS*|128字节（可能包括UTF-8字符）               \-|2048位（256|节PSK，输入512个十六进制数字）|
|*mbed TLS (PolarSSL)*|128 UTF-8 characters|\-|256-bit (default limit) (32-byte PSK, entered as 64 hexadecimal digits)|
|*mbed TLS (PolarSSL)*|128个UTF-8字符                             \-|25|位（默认限制）（32字节PSK，以64位十六进制数字输入）|
|*OpenSSL*|127 bytes (may include UTF-8 characters)|\-|2048-bit (256-byte PSK, entered as 512 hexadecimal digits)|
|*OpenSSL*|127字节（可能包括UTF-8字符）               \-|2048位（256|节PSK，输入512个十六进制数字）|

::: noteimportant
 Zabbix前端允许配置多达128个字符的长的PSK
identity（共享密钥一致性）字符串和2048位长的PSK，而不管使用的加密库。\
如果某些Zabbix组件支持较低限制，则用户有责任为这些组件配置PSK
identity（共享密钥一致性）和PSK值。\
超出长度限制会导致Zabbix组件之间的通信故障。 
:::

在Zabbix
server使用PSK连接到agent之前，服务器将查找数据库中为该agent配置的PSK
identity（共享密钥一致性）和PSK值（实际上在配置缓存中）。agent在收到连接后，从其配置文件中读取PSK
identity（共享密钥一致性）和PSK值。如果双方具有相同的PSK
identity（共享密钥一致性）字符串和PSK值，则连接可能会成功。

::: noteimportant
 用户有责任确保没有两个具有相同PSK
identity（共享密钥一致性）字符串但不同值的PSK。否则可能会导致使用PSK和PSK
identity（共享密钥一致性）字符串的Zabbix组件之间的通信被中断。

:::

[comment]: # ({/545575bf-dcbe370b})

[comment]: # ({75d00b32-3e166db9})
#### 生成PSK

例如，可以使用以下命令生成256位（32字节）PSK：

-   with *OpenSSL*:
-   使用*OpenSSL*：

```{=html}
<!-- -->
```
      $ openssl rand -hex 32
      af8ced32dfe8714e548694e2d29e1a14ba6fa13f216cb35c19d0feb1084b0429

-   使用*GnuTLS*:

```{=html}
<!-- -->
```
      $ psktool -u psk_identity -p database.psk -s 32
      Generating a random key for user 'psk_identity'
      Key stored to database.psk
      
      $ cat database.psk 
      psk_identity:9b8eafedfaae00cece62e85d5f4792c7d9c9bcc851b23216a1d300311cc4f7cb
      

请注意，上面"psktool"命令产生PSK值的数据库文件。Zabbix只需要PSK文件中的PSK，因此应该从文件中删除'psk\_identity:'。

[comment]: # ({/75d00b32-3e166db9})

[comment]: # ({2b2c08ad-0c5c40b9})
#### 配置PSK进行服务器和agent通信（示例）

在agent主机上，将PSK值写入文件，例如/home/zabbix/zabbix\_agentd.psk。
该文件必须在第一个文本字符串中包含PSK，例如：

    1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952

设置PSK文件的访问权限 - 它必须只能由Zabbix用户读取。

在agent配置文件zabbix\_agentd.conf中编辑TLS参数，例如set：

    TLSConnect=psk
    TLSAccept=psk
    TLSPSKFile=/home/zabbix/zabbix_agentd.psk
    TLSPSKIdentity=PSK 001

agent将连接到服务器（主动检查）并接受来自服务器和`zabbix_get`使用PSK连接。PSK身份将是“PSK
001”。

重新启动agent。现在可以使用zabbix\_get例如：

    $ zabbix_get -s 127.0.0.1 -k "system.cpu.load[all,avg1]" --tls-connect=psk \
                --tls-psk-identity="PSK 001" --tls-psk-file=/home/zabbix/zabbix_agentd.psk

（为了最大限度地减少停机时间看看如何改变连接方式[连接加密管理](/manual/encryption?&#connection_encryption_management)）。

在Zabbix前端为此agen配置PSK加密：

-   转到：*配置→主机*
-   选择主机，然后单击**加密**选项卡

例如：

![psk\_config.png](../../../assets/en/manual/encryption/psk_config.png)

当配置缓存与数据库同步时，新连接将使用PSK。检查服务器和agent日志文件以获取错误消息。

[comment]: # ({/2b2c08ad-0c5c40b9})

[comment]: # ({f1563565-2200dfcb})
#### 为服务器 - 主动proxy通信配置PSK（示例）

在proxy上，将PSK值写入文件，例如/home/zabbix/zabbix\_proxy.psk。该文件必须在第一个文本字符串中包含PSK，例如：

    e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9

设置PSK文件的访问权限 - 它必须只能由Zabbix用户读取。

在proxy配置文件zabbix\_proxy.conf中编辑TLS参数，例如set：

    TLSConnect=psk
    TLSPSKFile=/home/zabbix/zabbix_proxy.psk
    TLSPSKIdentity=PSK 002

proxy将使用PSK连接到服务器。PSK identity（共享密钥一致性）将是“PSK
002”。

（为了最大限度地减少停机时间看看如何改变连接方式[连接加密管理t](/manual/encryption#connection_encryption_management)）。

在Zabbix前端配置此proxy的PSK。转到*管理→agent代理程序*，选择代理，转到“加密”选项卡。在“从代理连接”勾选PSK。将“PSK
identity（共享密钥一致性）”字段填上“PSK
002”，“共享密钥（PSK）“字段填上"e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9"。点击“更新”。

重新启动proxy。它将开始使用基于PSK的加密连接到服务器。检查服务器和proxy日志文件以获取错误消息。

对于被动proxy，该过程非常相似。唯一的区别 -
TLSAccept=psk在proxy配置文件中设置并在Zabbix前端设置“连接代理” PSK。

[comment]: # ({/f1563565-2200dfcb})
