Zabbix中的每个预共享密钥(PSK)实际上由以下两部分组成:
PSK标识string是一个非空的UTF-8string字符串。例如"PSK ID 001 Zabbix agentd"。这是Zabbix组件引用该特定PSK的唯一名称。不要在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使用其配置file中的PSK身份标识和PSK值。若双方具有相同的PSK身份标识string和PSK值,则连接可能成功建立。
每个PSK身份标识必须仅对应一个值。用户需确保不存在具有相同身份标识string但不同值的多个PSK。若未遵守此规则,可能导致不可预知的错误或使用该PSK身份标识string的Zabbix组件间通信中断。
例如,可以使用256位(32字节)PSK生成 以下命令:
$ openssl rand -hex 32 af8ced32dfe8714e548694e2d29e1a14ba6fa13f216cb35c19d0feb1084b0429
$ psktool -u psk_identity -p database.psk -s 32 为用户'psk_identity'生成随机密钥 密钥已存储至数据库.psk
$ cat database.psk psk_identity:9b8eafedfaae00cece62e85d5f4792c7d9c9bcc851b23216a1d300311cc4f7cb
请注意,上述"psktool"会生成一个包含PSK身份标识的数据库file 及其关联的PSK。Zabbix在PSK file中仅期望一个PSK,因此 标识string和冒号(':')应从file中移除。
在agent 主机上,将PSK值写入file,例如 /home/zabbix/zabbix_agentd.psk
。该file必须在第一个文本string中包含PSK,例如:
设置PSK file的访问权限 - 必须仅允许Zabbix用户可读。
在agent配置文件file zabbix_agentd.conf
中编辑TLS参数, 例如设置:
该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日志文件中的错误信息。
在proxy上,将PSK值写入file,例如 /home/zabbix/zabbix_proxy.psk
。该file必须在第一个文本string中包含PSK,例如:
设置PSK file的访问权限 - 必须仅允许Zabbix用户可读。
在proxy配置文件file zabbix_proxy.conf
中编辑TLS参数,例如设置:
proxy将使用PSK连接服务器。PSK标识将为"PSK 002"。
(要最小化停机时间,请参阅连接加密管理中关于更改连接类型的方法)。
在Zabbix前端为此proxy配置PSK。前往 管理→Proxies,选择proxy,进入"加密"标签页。在 "来自proxy的连接"中勾选PSK
。在"PSK标识"字段输入 "PSK 002"并在 "PSK"字段输入"e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9"。点击"更新"。
重启proxy。它将开始使用基于PSK的加密连接与服务器通信。检查服务器和proxy日志文件中的错误信息。
对于被动式proxy,操作流程非常相似。唯一区别是 - 在proxy配置文件file中设置TLSAccept=psk
,并在Zabbix前端将"连接到 proxy"设置为PSK
。