2 使用预共享密钥
概述
Zabbix 中的每个预共享密钥 (PSK) 实际上是一对:
- 非密钥的 PSK 身份 string
- 密钥 PSK string 值。
PSK 身份 string 是一个非空的 UTF-8 string。例如:"PSK ID Zabbix agentd”。这是一个唯一名称,用于标识此特定的 PSK 被 Zabbix 组件引用。请勿在此处放置敏感信息 PSK 身份 string - 它通过网络以明文形式传输。
PSK值是一个难以猜测的十六进制数字组成的string,例如: e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9
大小限制
Zabbix中PSK标识和值的大小存在限制,在某些情况下,加密库可能具有更低的限制:
| 组件 | PSK标识最大大小 | PSK值最小大小 | PSK值最大大小 |
|---|---|---|---|
| Zabbix | 128 UTF-8字符 | 128位(16字节PSK,以32个十六进制数字输入) | 2048位(256字节PSK,以512个十六进制数字输入) |
| GnuTLS | 128字节(可能包含UTF-8字符) | - | 2048位(256字节PSK,以512个十六进制数字输入) |
| OpenSSL 1.0.x, 1.1.0 | 127字节(可能包含UTF-8字符) | - | 2048位(256字节PSK,以512个十六进制数字输入) |
| OpenSSL 1.1.1 | 127字节(可能包含UTF-8字符) | - | 512位(64字节PSK,以128个十六进制数字输入) |
| OpenSSL 1.1.1a及更高版本 | 127字节(可能包含UTF-8字符) | - | 2048位(256字节PSK,以512个十六进制数字输入) |
Zabbix前端允许配置最长128字符的PSK标识string和2048位的PSK,无论使用何种加密库。
如果某些Zabbix组件支持更低的限制,用户有责任为这些组件配置符合允许长度的PSK标识和值。
超出长度限制会导致Zabbix组件之间的通信失败。
在Zabbix server使用PSK连接到agent之前,服务器会在数据库中(实际上是在configuration cache中)查找该agent配置的PSK标识和PSK值。接收到连接时,agent会使用其配置文件中的PSK标识和PSK值。如果双方具有相同的PSK标识string和PSK值,连接可能会成功。
每个PSK标识只能与一个值配对。用户有责任确保没有两个PSK具有相同的标识string但不同的值。未能做到这一点可能导致使用该PSK标识string的Zabbix组件之间出现不可预测的错误或通信中断。
生成 PSK
例如,使用以下命令可以生成一个256位(32 字节)的PSK:
- 使用 OpenSSL:
<!-- -->
$ openssl rand -hex 32
af8ced32dfe8714e548694e2d29e1a14ba6fa13f216cb35c19d0feb1084b0429
- with GnuTLS:
{=html}
<!-- -->
$ psktool -u psk_identity -p database.psk -s 32
为用户 'psk_identity' 生成一个随机密钥
密钥存储到 database.psk
$ cat database.psk
psk_identity:9b8eafedfaae00cece62e85d5f4792c7d9c9bcc851b23216a1d300311cc4f7cb
注意,上面的 "psktool" 会生成一个包含PSK身份标识及其对应PSK的数据库 file。Zabbix 仅需要PSK文件中包含PSK,因此应从文件中删除身份标识 string 和冒号(':')。
为服务器-agent通信配置PSK(示例)
在 agent 主机 上,将 PSK 值写入文件,例如:
/home/zabbix/zabbix_agentd.psk。file 的第一行文本 string 必须包含 PSK,例如:
1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952
设置 PSK file 的访问权限 — 它必须仅对 Zabbix 用户可读。
在 agent 配置 file 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 加密:
- 转至:数据采集 → 主机
- 选择 主机,点击 加密 选项卡
示例:

所有必填字段均以红色星号标记。
当 configuration cache 与数据库同步后,新连接将使用 PSK。检查 server 和 agent 日志文件中的错误消息。
为服务器配置PSK以进行主动proxy通信(示例)
在proxy上,将PSK值写入一个文件,例如,
/home/zabbix/zabbix_proxy.psk。file 必须在第一个位置包含 PSK
文本 string,例如:
e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9
设置 PSK file 的访问权限 - 该权限必须仅限 Zabbix 用户可读。
编辑 proxy 配置中的 TLS 参数 file zabbix_proxy.conf,以用于
示例,设置:
加密连接=PSK
`TLSPSKFile`=/home/zabbix/zabbix_proxy.psk
TLSPSKIdentity=PSK 002
proxy 将使用 PSK 连接到服务器。PSK 身份标识将是 "PSK 002"
(为尽量减少停机时间,请参见如何在 连接加密管理 中更改连接类型)。
在Zabbix前端为此proxy配置PSK。转到
管理→Proxies,选择proxy,进入“加密”选项卡。在
“proxy”的连接。将 PSK 粘贴到“PSK identity”字段中
PSK 002
e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9
“PSK”字段。点击“Update”。
重启 proxy。它将开始使用基于 PSK 的加密连接 服务器。检查服务器和proxy日志文件中的错误消息。
对于被动式 proxy,其操作流程也非常相似。唯一的区别是 -
在 proxy 配置 file 中设置 TLSAccept=psk 并设置“连接到
将proxy设置为PSK。