Перейти к содержанию

SSH CA

·3 минуты·
SSH CA регулирует связность между нодами сети: кто, куда и с какими правами может подключиться по SSH. Вместо разрозненных authorized_keys-файлов — единая иерархия доверия с централизованным выпуском и отзывом сертификатов.

Матрица доступа #

SSH-связность ограничена управляющим контуром сети. Клиентские устройства к SSH не допускаются — они взаимодействуют с сетью исключительно через Xray.

ИсточникНазначениеДоступ
RootCore
RootEntry
CoreCore✓ (mesh)
CoreEntry
Клиентское устройствоЛюбая нода

Иерархия SSH CA #

SSH CA организован по двухуровневой схеме — по аналогии с X.509 PKI.

Root CA — корень доверия, хранится на Root-ноде. Выпускает:

  • Host-сертификаты для Root-ноды и всех Core-нод
  • CA-сертификаты для Core-нод (право выпускать сертификаты для подчиненных Entry-нод)
  • User-сертификаты для сервисного пользователя sigil

Core CA — промежуточный удостоверяющий центр на каждой Core-ноде. Выпускает:

  • Host-сертификаты для Entry-нод своей группы

Такая структура соответствует административной модели сети: каждая Core-нода ответственна за свою группу Entry-нод и самостоятельно управляет их сертификатами.

Root CA
├── Host-cert: Root-нода
├── Host-cert: Core-нода (каждая)
├── CA-cert:   Core-нода (право подписи для Entry-нод)
└── User-cert: sigil

Core CA (на каждой Core-ноде)
└── Host-cert: Entry-нода (каждая в группе)

Типы сертификатов #

Host-сертификаты #

Нода удостоверяет себя при входящем SSH-подключении. Подключающаяся сторона проверяет, что хост подписан доверенным CA — вместо ручного ведения known_hosts.

Все ноды имеют host-сертификат: Root, Core и Entry.

User-сертификаты #

Пользователь sigil удостоверяет себя при подключении к ноде. Нода проверяет сертификат через CA — вместо ведения authorized_keys на каждой ноде.

Единственный принципал во всей сети — sigil. Разграничение доступа (кто куда может подключиться) задается через опции сертификата, а не через разные принципалы.

Хранение #

Root-нода #

Ключи и артефакты SSH CA хранятся в выделенной директории, изолированной от системных ключей:

/root/SigilGate/pki/ssh/
├── root_ca              # приватный ключ Root CA
├── root_ca.pub          # публичный ключ Root CA
├── revoked_keys         # список отозванных ключей и сертификатов
└── issued/              # копии выпущенных сертификатов (архив)

Ноды (Core, Entry) #

SSH-сертификаты размещаются рядом с ключами пользователя sigil:

/home/sigil/.ssh/
├── id_ed25519            # приватный ключ
├── id_ed25519.pub        # публичный ключ
└── id_ed25519-cert.pub   # сертификат (host или user, в зависимости от контекста)

Конфигурация sshd на каждой ноде указывает на публичный ключ CA для проверки входящих сертификатов, а также на файл revoked_keys.

Жизненный цикл #

Сроки действия #

УровеньСрок
Root CAБессрочно
Core-нода6 месяцев
Entry-нода1 месяц

Тип ключа: Ed25519.

Продление #

На текущем этапе — ручная операция с Root-ноды. Выпускается новый сертификат с тем же ключом и деплоится на ноду до истечения срока действия.

В перспективе срок жизни сертификатов включается в систему мониторинга: приближение к дедлайну — один из параметров алертинга.

Отзыв #

Используется механизм RevokedKeys OpenSSH: sshd проверяет файл отозванных ключей при каждом подключении. Отозванный сертификат блокируется немедленно — без изменения authorized_keys на нодах.

Файл revoked_keys хранится на Root-ноде и синхронизируется на все ноды при обновлении.