Шифрование с использованием предварительно общих ключей
Обзор
Каждый предварительно общий ключ (PSK) в Zabbix на самом деле представляет собой пару из:
- не секретной строки идентификатора PSK,
- секретного строкового значения PSK.
Строка идентификатора PSK — это непустая строка UTF-8. Например, "PSK ID 001 Zabbix agentd". Это уникальное имя, по которому данный PSK упоминается компонентами Zabbix. Не помещайте конфиденциальную информацию в строку идентификатора PSK — она передается по сети без шифрования.
Значение PSK — это труднопредсказуемая строка шестнадцатеричных цифр, например, "e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9".
Ограничения размера
В Zabbix существуют ограничения на размер PSK identity и значения PSK; в некоторых случаях криптографическая библиотека может иметь более низкий предел:
| Component | PSK identity max size | PSK value min size | PSK value max size |
|---|---|---|---|
| Zabbix | 128 символов UTF-8 | 128-bit (PSK 16 байт, вводится как 32 шестнадцатеричных цифры) | 2048-bit (PSK 256 байт, вводится как 512 шестнадцатеричных цифр) |
| GnuTLS | 128 байт (может включать символы UTF-8) | - | 2048-bit (PSK 256 байт, вводится как 512 шестнадцатеричных цифр) |
| OpenSSL 1.0.x, 1.1.0 | 127 байт (может включать символы UTF-8) | - | 2048-bit (PSK 256 байт, вводится как 512 шестнадцатеричных цифр) |
| OpenSSL 1.1.1 | 127 байт (может включать символы UTF-8) | - | 512-bit (PSK 64 байта, вводится как 128 шестнадцатеричных цифр) |
| OpenSSL 1.1.1a and later | 127 байт (может включать символы UTF-8) | - | 2048-bit (PSK 256 байт, вводится как 512 шестнадцатеричных цифр) |
веб-интерфейс Zabbix позволяет настраивать строку PSK identity длиной до 128 символов и PSK длиной до 2048 бит независимо от используемых криптографических библиотек.
Если некоторые компоненты Zabbix поддерживают более низкие ограничения, пользователь обязан настроить PSK identity и значение PSK с допустимой длиной для этих компонентов.
Превышение ограничений по длине приводит к сбоям связи между компонентами Zabbix.
Перед тем как сервер Zabbix подключится к агенту с использованием PSK, сервер выполняет поиск PSK identity и значения PSK, настроенных для этого агента, в базе данных (фактически в кэше конфигурации). При получении подключения агент использует PSK identity и значение PSK из своего файла конфигурации. Если обе стороны имеют одинаковую строку PSK identity и значение PSK, подключение может быть успешно установлено.
Каждая PSK identity должна быть связана только с одним значением. Пользователь обязан убедиться, что не существует двух PSK с одинаковой строкой identity, но разными значениями. Несоблюдение этого требования может привести к непредсказуемым ошибкам или нарушению связи между компонентами Zabbix, использующими PSK с этой строкой PSK identity.
Генерация PSK
Например, PSK длиной 256 бит (32 байта) можно сгенерировать с помощью следующих команд:
- с 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 для связи сервер-агент (пример)
На узле сети агента запишите значение PSK в файл, например,
/home/zabbix/zabbix_agentd.psk. Файл должен содержать PSK в первой
текстовой строке, например:
1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952
Установите права доступа к файлу PSK — он должен быть доступен на чтение только пользователю Zabbix.
Отредактируйте параметры TLS в файле конфигурации агента Zabbix (zabbix_agentd.conf). Например, задайте:
TLSConnect=psk
TLSAccept=psk
TLSPSKFile=/home/zabbix/zabbix_agentd.psk
TLSPSKIdentity=PSK 001
Агент будет подключаться к серверу (активные проверки) и принимать от сервера
и zabbix_get только подключения с использованием PSK. Идентификатор PSK будет "PSK
001".
Перезапустите агент. Теперь можно проверить подключение с помощью 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
(Чтобы минимизировать время простоя, см. как изменить тип подключения в Управлении шифрованием соединений).
Настройте шифрование PSK для этого агента в веб-интерфейсе Zabbix:
- Перейдите в: Сбор данных > Узлы сети.
- Выберите узел сети и нажмите вкладку Шифрование.
Пример:

Все обязательные поля ввода отмечены красной звездочкой.
Когда кэш конфигурации будет синхронизирован с базой данных, новые подключения будут использовать PSK. Проверьте журналы сервера и агента на наличие сообщений об ошибках.
Настройка PSK для связи сервер - активный прокси (пример)
На прокси запишите значение PSK в файл, например,
/home/zabbix/zabbix_proxy.psk. Файл должен содержать PSK в первой
текстовой строке, например:
e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9
Установите права доступа к файлу PSK - он должен быть доступен для чтения только пользователю Zabbix.
Отредактируйте параметры TLS в файле конфигурации прокси Zabbix (zabbix_proxy.conf). Например, задайте:
TLSConnect=psk
TLSPSKFile=/home/zabbix/zabbix_proxy.psk
TLSPSKIdentity=PSK 002
Прокси будет подключаться к серверу с использованием PSK. Идентификатор PSK будет "PSK 002".
(Чтобы минимизировать время простоя, см. как изменить тип подключения в Управление шифрованием соединений).
Настройте PSK для этого прокси в веб-интерфейсе Zabbix. Перейдите в
Administration > Proxies, выберите прокси, откройте вкладку Encryption. В
"Connections from proxy" отметьте PSK. В поле "PSK identity" вставьте
"PSK 002", а в поле
"PSK" - "e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9".
Нажмите "Update".
Перезапустите прокси. Он начнет использовать зашифрованные соединения на основе PSK с сервером. Проверьте журналы сервера и прокси на наличие сообщений об ошибках.
Для пассивного прокси процедура очень похожа.
Единственное отличие - задайте TLSAccept=psk в файле конфигурации прокси Zabbix и установите Connections to proxy в веб-интерфейсе Zabbix в значение PSK.
Устранение неполадок с PSK
PSK содержит нечетное количество шестнадцатеричных цифр
Прокси или агент не запускается, сообщение в журнале прокси или агента:
invalid PSK in file "/home/zabbix/zabbix_proxy.psk"
Строка идентификатора PSK длиной более 128 байт передается в GnuTLS
В журнале клиента TLS:
gnutls_handshake() failed: -110 The TLS connection was non-properly terminated.
В журнале сервера TLS:
gnutls_handshake() failed: -90 The SRP username supplied is illegal.
Слишком длинное значение PSK, используемое с OpenSSL 1.1.1
В журнале на стороне подключения:
...Библиотека OpenSSL (версия OpenSSL 1.1.1 11 Sep 2018) инициализирована
...
...В zbx_tls_connect(): psk_identity:"PSK 1"
...zbx_psk_client_cb() запросил идентификатор PSK "PSK 1"
...Завершение zbx_tls_connect():FAIL error:'SSL_connect() set result code to SSL_ERROR_SSL: file ssl\statem\extensions_clnt.c line 801: error:14212044:SSL routines:tls_construct_ctos_early_data:internal error: TLS write fatal alert "internal error"'
В журнале на стороне принимающего:
...Сообщение от 123.123.123.123 не содержит заголовка. Сообщение проигнорировано.
Эта проблема обычно возникает при обновлении OpenSSL с 1.0.x или 1.1.0 до 1.1.1, если значение PSK длиннее 512 бит (PSK длиной 64 байта, введенный как 128 шестнадцатеричных цифр).
См. также: Ограничения размера значения