[comment]: # translation:outdated

[comment]: # ({14d0ad91-14d0ad91})
# 2. Использование общих ключей (pre-shared keys)

[comment]: # ({/14d0ad91-14d0ad91})

[comment]: # ({3935bdee-3935bdee})
#### Обзор

Каждый общий ключ (pre-shared key, PSK) в Zabbix на самом деле является парой из:

-   несекретной строки идентификации PSK,
-   секретного значения строки PSK.

Строкой идентификации PSK является непустая строка UTF-8. Например, «PSK ID 001 Zabbix agentd». Это уникальное имя, по которому компоненты Zabbix ссылаются на этот конкретный общий ключ. Не помещайте чувствительную информацию в строку идентификации PSK — она передаётся по сети незашифрованной. 

Значением PSK является сложно угадываемая строка из шестнадцатеричных цифр, например: «e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9».

[comment]: # ({/3935bdee-3935bdee})

[comment]: # ({540b9ee2-a75bbda5})
#### Ограничения размера

В 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 and later*|127 байт (может включать UTF-8 символы)|\-|2048-бит (256-байт PSK, введённые как 512 шестнадцатеричных цифр)|

::: noteimportant
Веб-интерфейс Zabbix позволяет указать до 128 символов строки идентификатора PSK и до 2048-бит PSK вне зависимости от использованной крипто библиотеки.<br>
Если некоторые компоненты Zabbix поддерживают меньшую длину, только пользователь несет ответственность за настройку идентификатора и значения PSK в соответствии с разрешённой в этих компонентах длиной.<br>
Превышение ограничений длины приведёт к ошибкам в подключениях между компонентами Zabbix.  
:::

Перед тем как Zabbix сервер подключится к агенту с использованием общего ключа, сервер поищет идентификатор PSK и значение PSK этого агента в базе данных (в действительности в кэше конфигурации). Принимая подключение, агент использует идентификатор PSK и значение PSK из своего файла конфигурации. Если обе пары имеют одинаковые идентификаторы PSK и значения PSK, соединение может быть успешным.

::: noteimportant
Каждая строка идентификации PSK должна иметь в паре с ней только одно значение. Пользователь несет ответственность за обеспечение того, что не будет двух ключей с одинаковыми строками идентификации, но разными значениями. Несоблюдение этого требования может привести к непредсказуемым сбоям связи между компонентами Zabbix, использующими общие ключи с этими строками идентификации PSK.
:::

[comment]: # ({/540b9ee2-a75bbda5})

[comment]: # ({3e166db9-3e166db9})
#### Генерирование общего ключа

Например, 256-битный (32 байт) PSK можно сгенерировать при помощи следующих команд:

-   с *OpenSSL*:

```{=html}
<!-- -->
```
      $ openssl rand -hex 32
      af8ced32dfe8714e548694e2d29e1a14ba6fa13f216cb35c19d0feb1084b0429

-   с *GnuTLS*:

```{=html}
<!-- -->
```
      $ 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» выше генерирует файл базы данных с идентификатором ключа и со связанным с ним значением. Zabbix ожидает в файле с ключом только значение, поэтому строку идентификации и двоеточие («:») нужно оттуда удалить.

[comment]: # ({/3e166db9-3e166db9})

[comment]: # ({43b9af4e-0c5c40b9})
#### Настройка PSK для соединения сервер-агент (пример)

На хосте агента запишите значение PSK в файл, например, `/home/zabbix/zabbix_agentd.psk`. Этот файл должен содержать общий ключ в первой строке текста, например:

    1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952

Задайте права доступа к PSK файлу — он должен быть доступен для чтения только пользователю Zabbix.

Измените параметры TLS в файле конфигурации `zabbix_agentd.conf`; например, выставьте: 

    TLSConnect=psk
    TLSAccept=psk
    TLSPSKFile=/home/zabbix/zabbix_agentd.psk
    TLSPSKIdentity=PSK 001

Агент будет подключаться к серверу (активные проверки) и принимать от сервера и `zabbix_get` только те соединения, которые используют общий ключ. Идентификатором ключа будет «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

(Чтобы свести к минимуму время простоя, смотрите как изменить тип подключения в [Управлении зашифрованными соединениями](/manual/encryption#управление-зашифрованными-соединениями)).

Настройте для этого агента шифрование с общим ключом в веб-интерфейсе Zabbix.

-   Перейдите к: *Сбор данных → Узлы сети (Data collection → Hosts)*
-   Выберите узел сети и нажмите на вкладку **Шифрование (Encryption)**

Пример:

![psk\_config.png](../../../assets/en/manual/encryption/psk_config.png)

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

Когда кэш конфигурации синхронизируется с базой данных, новые подключения будут использовать общий ключ. Проверьте файлы журналов сервера и агента на предмет сообщений об ошибках.

[comment]: # ({/43b9af4e-0c5c40b9})

[comment]: # ({5b4b0ac1-2200dfcb})
#### Настройка PSK для соединения сервер - активный прокси (пример)

На хосте прокси запишите значение общего ключа в файл, например, `/home/zabbix/zabbix_proxy.psk`. Этот файл должен содержать ключ в первой строке текста, например:

    e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9

Задайте права доступа к PSK файлу — он должен быть доступен для чтения только пользователю Zabbix.

Измените параметры TLS в файле конфигурации `zabbix_proxy.conf`; например, задайте:

    TLSConnect=psk
    TLSPSKFile=/home/zabbix/zabbix_proxy.psk
    TLSPSKIdentity=PSK 002

Прокси будет подключаться к серверу, используя общий ключ. Идентификатором общего ключа будет «PSK 002».

(Чтобы свести к минимуму время простоя, смотрите как изменить тип подключения в [Управлении зашифрованными соединениями](/manual/encryption#управление-зашифрованными-соединениями)).

Настройте общий ключ для этого прокси в веб-интерфейсе Zabbix. Перейдите на *Администрирование → Прокси (Administration→Proxies)*, выберите прокси, перейдите на вкладку «Шифрование (Encryption)». Переключите «Соединения с прокси (Connections from proxy)» на `PSK`. Вставьте в поле «Идентификатор PSK (PSK identity)» значение «PSK 002» и «e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9» в поле «PSK». Нажмите «Обновить (Update)». 

Перезапустите прокси. Он начнет использовать зашифрованные соединения к серверу на основе общего ключа. Проверьте файлы журналов сервера и прокси на предмет сообщений об ошибках.

В случае пассивных прокси процедура очень похожа. Разница лишь в том, что в файле конфигурации прокси необходимо задать `TLSAccept=psk` и переключить «Подключения к прокси (Connections to proxy)» в Zabbix веб-интерфейсе на `PSK`.

[comment]: # ({/5b4b0ac1-2200dfcb})
