Шифрование соединений между агентом и контроллером
При первом запуске агент устанавливает соединение с контроллером, адрес которого указан в конфигурационном файле агента.
Агент инициирует процедуру рукопожатия и отправляет свой публичный ключ контроллеру.
После установки первичного соединения публичный ключ агента сохраняется на контроллере.
Затем контроллер передает агенту свой публичный ключ вместе с ротируемым симметричным ключом AES, используемым для шифрования и расшифрования сообщений, передаваемых контроллером.
Ключ AES передается зашифрованным публичным ключом, полученным ранее от агента.
Весь дальнейший обмен между контроллером и агентом шифруется ключами AES.
Ротируемый ключ AES используется для шифрования команд, отправляемых контроллером агенту, и для шифрования соединений с файловым сервером контроллера SALT.BOX.
Ключ генерируется повторно при каждом перезапуске контроллера, а также каждый раз, когда ключ агента удаляется командой salt-key.
После ротации ключа все агенты должны выполнить повторную аутентификацию для получения обновленного ключа.
Это позволяет выполнять ротацию ключа AES без необходимости прерывания соединения с агентом.
Данные публикаций между контроллером и агентом шифруются ключом AES с ротацией.
При прямом взаимодействии контроллера и агента данные шифруются уникальным ключом AES для каждой сессии.
На Рис. 1 показана диаграмма процедуры взаимной аутентификации контроллера и агента.
Взаимодействия, указанные на диаграмме, описаны в таблице 1.
Таблица 1. Переходы (взаимодействия) диаграммы процедуры взаимной аутентификации контроллера и агента
| № взаимодействия | Описание |
|---|---|
| 1 | Контроллер генерирует пару ключей: приватный и публичный |
| 2 | Агент генерирует пару ключей: приватный и публичный |
| 3 | Агент отправляет свой открытый ключ контроллеру каждые 30 секунд, пока ключ не будет принят контроллером |
| 4 | Если ключ не был принят ранее, контроллер записывает его в файл <pki_dir>/master/minions_pre/<minion_id> |
| 5 | Если ключ уже был принят ранее, контроллер записывает его в файл <pki_dir>/master/minions_denied/<minion_id> |
| 6 | Файл <minion_id> с ключом агента перемещается в каталог <pki_dir>/master/minions/ |
| 7 | Контроллер отправляет свой публичный ключ агенту |
| 8 | Агент помещает файл minion_master.pub с публичным ключом контроллера в свой каталог <pki_dir>/minion/ |
| 9 | Контроллер отправляет агенту симметричный ключ AES, который используется для шифрования в дальнейшем процессе обмена данными с контроллером. Ключ AES шифруется публичным RSA-ключом агента |
| 10 | Файл <minion_id> с ключом агента перемещается в каталог <pki_dir>/master/minions_rejected. |
| 11, 12 | Контроллер выполняет ротацию ключа AES и распространяет его на все агенты (т.к. ключ агента отклонён) |
| 13, 14, 15 | Контроллер ежедневно выполняет ротацию ключа AES и распространяет его на все агенты |
| 16 | Любой агент был отклонён или удалён |
| 17, 18, 19 | Контроллер выполняет ротацию ключа AES и распространяет его на все агенты |