Перейти к основному содержимому

Шифрование клиент-серверных соединений

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

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

Ротируемый ключ AES используется для шифрования команд, отправляемых мастером миньону, и для шифрования соединений с файловым сервером мастера SaltStack.
Ключ генерируется повторно при каждом перезапуске мастера, а также каждый раз, когда ключ миньона удаляется командой salt-key.
После ротации ключа все миньоны должны выполнить повторную аутентификацию для получения обновленного ключа.
Это позволяет выполнять ротацию ключа AES без необходимости прерывания соединения с миньоном.

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

На Рис. 1 показана диаграмма процедуры взаимной аутентификации сервера и миньона.

Взаимодействия, указанные на диагрмме, описаны в таблице 1.


Рисунок 1. Диаграмма процедуры взаимной аутентификации сервера и миньона


Таблица 1. Переходы (взаимодействия) диаграммы процедуры взаимной аутентификации сервера и миньона

взаимодействия
Описание
1Сервер генерируют пару ключей: приватный и публичный
2Миньон генерируют пару ключей: приватный и публичный
3Миньон отправляет свой открытый ключ серверу каждые 30 секунд, пока ключ не будет принят сервером
4Если ключ не был принят ранее, сервер записывает его в файл <pki_dir>/master/minions_pre/<minion_id>
5Если ключ уже был принят ранее, сервер записывает его в файл <pki_dir>/master/minions_denied/<minion_id>
6Администратор получает запрос на принятие ключа нового миньона
7Администратор принимает ключ миньона, выполнив команду salt-key -a minion_id
8Файл <minion_id> с ключом миньона перемещается в каталог <pki_dir>/master/minions/
9Сервер отправляет свой публичный ключ миньону
10Миньон помещает файл minion_master.pub с публичным ключом сервера в свой каталог <pki_dir>/minion/
11Сервер отправляет миньону симметричный ключ AES, который используется для шифрования и дешифрования в дальнейшем процессе обмена данными с сервером.
Ключ AES шифруется публичным RSA-ключом клиента
12Администратор получает запрос на принятие ключа нового миньона
13Администратор отклоняет ключ миньона
14Файл <minion_id> с ключом миньона перемещается в каталог <pki_dir>/master/minions_rejected.
15, 16Сервер выполняет ротацию ключа AES и распространяет его на все миньоны (т.к. ключ миньона отклонён)
17, 18, 19Сервер ежедневно выполняет ротацию ключа AES и распространяет его на все миньоны
20Любой миньон был отклонён или удалён
21, 22, 23Сервер выполняет ротацию ключа AES и распространяет его на все миньоны