Шифрование с использованием предварительно общих ключей
Обзор
Каждый предварительно общий ключ (PSK) в Zabbix на самом деле представляет собой пару из:
- не секретной строки идентификатора PSK,
- секретного строкового значения PSK.
Строка идентификатора PSK — это непустая строка UTF-8. Например, "PSK ID 001 Zabbix agentd". Это уникальное имя, по которому данный PSK упоминается компонентами Zabbix. Не помещайте конфиденциальную информацию в строку идентификатора PSK — она передается по сети без шифрования.
Значение PSK — это труднопредсказуемая строка шестнадцатеричных цифр, например, "e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9".
Ограничения размера
В Zabbix существуют ограничения размера идентификатора PSK и значения PSK; в некоторых случаях криптографическая библиотека может иметь более низкое ограничение:
| Компонент | Максимальный размер идентификатора PSK | Минимальный размер значения PSK | Максимальный размер значения PSK |
|---|---|---|---|
| Zabbix | 128 символов UTF-8 | 128 бит (PSK размером 16 байт, вводится как 32 шестнадцатеричные цифры) | 2048 бит (PSK размером 256 байт, вводится как 512 шестнадцатеричных цифр) |
| GnuTLS | 128 байт (может включать символы UTF-8) | - | 2048 бит (PSK размером 256 байт, вводится как 512 шестнадцатеричных цифр) |
| OpenSSL 1.0.x, 1.1.0 | 127 байт (может включать символы UTF-8) | - | 2048 бит (PSK размером 256 байт, вводится как 512 шестнадцатеричных цифр) |
| OpenSSL 1.1.1 | 127 байт (может включать символы UTF-8) | - | 512 бит (PSK размером 64 байта, вводится как 128 шестнадцатеричных цифр) |
| OpenSSL 1.1.1a и более поздние версии | 127 байт (может включать символы UTF-8) | - | 2048 бит (PSK размером 256 байт, вводится как 512 шестнадцатеричных цифр) |
Веб-интерфейс Zabbix позволяет настроить строку идентификатора PSK длиной до 128 символов и PSK длиной до 2048 бит независимо от используемых криптографических библиотек.
Если некоторые компоненты Zabbix поддерживают более низкие ограничения, пользователь должен самостоятельно настроить идентификатор и значение PSK с допустимой для этих компонентов длиной.
Превышение ограничений длины приводит к сбоям связи между компонентами Zabbix.
Перед подключением сервера Zabbix к агенту с использованием PSK сервер ищет в базе данных (фактически в кэше конфигурации) идентификатор PSK и значение PSK, настроенные для этого агента. При получении подключения агент использует идентификатор PSK и значение PSK из своего файла конфигурации. Если у обеих сторон совпадают строка идентификатора PSK и значение PSK, подключение может быть установлено.
Каждый идентификатор PSK должен быть связан только с одним значением. Пользователь должен убедиться, что не существует двух PSK с одинаковой строкой идентификатора, но разными значениями. Несоблюдение этого требования может привести к непредсказуемым ошибкам или нарушениям связи между компонентами Zabbix, использующими PSK с этой строкой идентификатора PSK.
Генерация 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 для обмена данными между сервером и активным прокси (пример)
На прокси запишите значение 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. Перейдите в раздел
Администрирование > Прокси, выберите прокси и откройте вкладку
Шифрование. В разделе «Подключения от прокси» установите флажок PSK. Вставьте в поле
«Идентификатор PSK» значение «PSK 002», а в поле
«PSK» — значение
«e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9».
Нажмите «Обновить».
Перезапустите прокси. Он начнет использовать зашифрованные подключения к серверу на основе PSK. Проверьте файлы журналов сервера и прокси на наличие сообщений об ошибках.
Для пассивного прокси процедура практически такая же.
Единственное отличие заключается в том, что в файле конфигурации прокси Zabbix необходимо задать TLSAccept=psk, а в веб-интерфейсе 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 шестнадцатеричных цифр).
См. также: Ограничения размера значения