Шифрование с использованием предварительно общих ключей

Обзор

Каждый предварительно общий ключ (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:

  1. Перейдите в раздел: Сбор данных > Узлы сети.
  2. Выберите узел сети и перейдите на вкладку Шифрование.
  3. Настройте параметры шифрования PSK.

Пример:

psk\_config.png

Все обязательные поля отмечены красной звездочкой.

После синхронизации кэша конфигурации с базой данных новые подключения будут использовать 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 шестнадцатеричных цифр).

См. также: Ограничения размера значения