2 使用预共享密钥
概述
Zabbix 中的每个预共享密钥(PSK)实际上由以下两部分组成:
- 非机密的 PSK 标识字符串;
- 机密的 PSK 字符串值。
PSK 标识字符串是非空的 UTF-8 字符串。例如:"PSK ID 001 Zabbix agentd"。它是 Zabbix 组件用于引用此特定 PSK 的唯一名称。请勿在 PSK 标识字符串中放入敏感信息,因为该字符串会以未加密的形式通过网络传输。
PSK 值是由难以猜测的十六进制数字组成的字符串,例如:
e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9。
切勿在生产环境中使用文档中提供的示例 PSK 值。 请改为生成唯一且经过加密保护的 PSK。
大小限制
Zabbix 中 PSK 标识和 PSK 值都有大小限制,在某些情况下,密码库的限制可能更低:
| Component | PSK identity max size | PSK value min size | PSK value max size |
|---|---|---|---|
| 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) |
| GnuTLS | 128 bytes (may include UTF-8 characters) | - | 2048-bit (256-byte PSK, entered as 512 hexadecimal digits) |
| OpenSSL 1.0.x, 1.1.0 | 127 bytes (may include UTF-8 characters) | - | 2048-bit (256-byte PSK, entered as 512 hexadecimal digits) |
| OpenSSL 1.1.1 | 127 bytes (may include UTF-8 characters) | - | 512-bit (64-byte PSK, entered as 128 hexadecimal digits) |
| OpenSSL 1.1.1a and later | 127 bytes (may include UTF-8 characters) | - | 2048-bit (256-byte PSK, entered as 512 hexadecimal digits) |
Zabbix 前端 允许配置最长 128 个字符的 PSK 标识字符串,以及 2048 位长度的 PSK,不受所使用的密码库影响。
如果某些 Zabbix 组件支持的限制更低,则用户有责任为这些组件配置允许长度内的 PSK 标识和 PSK 值。
超过长度限制会导致 Zabbix 组件之间通信失败。
在 Zabbix 服务器 使用 PSK 连接 agent 之前,服务器会在数据库中(实际上是在配置缓存中)查找为该 agent 配置的 PSK 标识和 PSK 值。收到连接后,agent 会使用其配置文件中的 PSK 标识和 PSK 值。如果双方具有相同的 PSK 标识字符串和 PSK 值,连接就可能成功。
每个 PSK 标识只能对应一个值。用户有责任确保不存在两个具有相同标识字符串但值不同的 PSK。否则可能会导致不可预测的错误,或中断使用该 PSK 标识字符串的 Zabbix 组件之间的通信。
生成 PSK
例如,可以使用以下命令生成一个 256 位(32 字节)的 PSK:
- 使用 OpenSSL:
$ openssl rand -hex 32
af8ced32dfe8714e548694e2d29e1a14ba6fa13f216cb35c19d0feb1084b0429
- 使用 GnuTLS:
$ 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 标识和其关联 PSK 的数据库文件。Zabbix 只需要 PSK 文件中的 PSK,因此应从文件中删除标识字符串和冒号(':')。
配置 PSK 用于服务器-agent 通信(示例)
在 agent 主机上,将上面生成的 PSK 值写入文件,例如 /home/zabbix/zabbix_agentd.psk。
该文件的第一行必须包含 PSK 值。
设置 PSK 文件的访问权限 - 该文件只能由 Zabbix 用户读取。
编辑 agent 配置文件 zabbix_agentd.conf 中的 TLS 参数,
例如,设置:
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
(如需最大限度地减少停机时间,请参阅如何更改连接类型:连接加密管理。)
在 Zabbix 前端中为此 agent 配置 PSK 加密:
- 转到:数据采集 → 主机
- 选择主机,然后单击加密选项卡
示例:

所有必填输入字段均以红色星号标记。
当配置缓存与数据库同步后,新连接将使用 PSK。检查服务器和 agent 日志文件中的错误消息。
配置 server - active proxy 通信的 PSK(示例)
在 proxy 上,将 PSK 值写入文件,例如
/home/zabbix/zabbix_proxy.psk。该文件必须在第一行文本字符串中包含 PSK,例如:
e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9
将 PSK 文件的访问权限设置为仅 Zabbix 用户可读。
编辑 proxy 配置文件 zabbix_proxy.conf 中的 TLS 参数,例如设置:
TLSConnect=psk
TLSPSKFile=/home/zabbix/zabbix_proxy.psk
TLSPSKIdentity=PSK 002
proxy 将使用 PSK 连接到 server。PSK 标识将为 "PSK 002"。
(如需尽量减少停机时间,请参阅如何在 Connection encryption management 中更改连接类型。)
在 Zabbix 前端中为该 proxy 配置 PSK。转到
Administration→Proxies,选择该 proxy,进入 "Encryption" 选项卡。在 "Connections from proxy" 中勾选 PSK。将 "PSK identity" 字段填入 "PSK 002",并将
"e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9" 填入
"PSK" 字段。点击 "Update"。
重启 proxy。它将开始使用基于 PSK 的加密连接连接到 server。检查 server 和 proxy 日志文件中的错误信息。
对于 passive proxy,步骤非常相似。唯一的区别是——在 proxy 配置文件中设置 TLSAccept=psk,并在 Zabbix 前端中将 "Connections to proxy" 设置为 PSK。