Как работает Kerberos — основы для инженера Принтум
Как работает Kerberos — основы для инженера Принтум
Назначение
Kerberos — сетевой протокол аутентификации на основе тикетов (RFC 4120). Позволяет пользователям доказывать свою идентичность сервисам без передачи пароля по сети.
Основные компоненты
| Компонент | Описание |
|---|---|
| KDC (Key Distribution Center) | Центр выдачи тикетов, обычно совмещён с AD |
| AS (Authentication Service) | Выдаёт TGT после проверки пароля |
| TGS (Ticket Granting Service) | Выдаёт тикеты сервисов на основе TGT |
| TGT (Ticket Granting Ticket) | Первичный тикет, подтверждает личность пользователя |
| ST (Service Ticket) | Тикет для доступа к конкретному сервису |
| Realm | Административный домен Kerberos (обычно = DNS-домен, UPPER CASE) |
Процесс аутентификации
1. Клиент → AS: AS-REQ (имя пользователя)
2. AS → Клиент: AS-REP (TGT, зашифрован ключом KDC)
3. Клиент → TGS: TGS-REQ (TGT + имя сервиса)
4. TGS → Клиент: TGS-REP (Service Ticket)
5. Клиент → Сервис: AP-REQ (Service Ticket)
6. Сервис → Клиент: AP-REP (подтверждение)
Почему вход прозрачный (SSO)
После получения TGT (шаги 1–2, выполняются при входе в Windows/Linux) все последующие обращения к сервисам (шаги 3–6) происходят автоматически — пользователь не вводит пароль повторно.
TGT имеет срок жизни — как правило, 8–10 часов (настраивается в политиках домена). По истечении требуется повторная аутентификация или продление (renewal).
Ключевые свойства
- Пароль пользователя никогда не передаётся по сети.
- Используется симметричное шифрование (AES-256 в современных реализациях).
- Все тикеты ограничены по времени (timestamp + skew до 5 минут).
- Расхождение системных часов более 5 минут приводит к ошибке
KRB_AP_ERR_SKEW.
Связь с SSO в Принтум
Принтум может использовать Kerberos/GSSAPI для прозрачной аутентификации пользователей в среде Active Directory — пользователь, вошедший в домен, получает доступ к сервисам Принтум без повторного ввода пароля.
TODO: уточнить — поддерживается ли Kerberos SSO напрямую или только через промежуточный IdP (например, ADFS/Keycloak).