SSH CA
Содержание
authorized_keys-файлов — единая иерархия доверия с централизованным выпуском и отзывом сертификатов.Матрица доступа #
SSH-связность ограничена управляющим контуром сети. Клиентские устройства к SSH не допускаются — они взаимодействуют с сетью исключительно через Xray.
| Источник | Назначение | Доступ |
|---|---|---|
| Root | Core | ✓ |
| Root | Entry | ✓ |
| Core | Core | ✓ (mesh) |
| Core | Entry | ✓ |
| Клиентское устройство | Любая нода | ✗ |
Иерархия 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-ноде и синхронизируется на все ноды при обновлении.