Настройка SSO через Kerberos
Чтобы настроить технологию единого входа через Kerberos, выполните шаги:
- Настройте IWA — встроенную аутентификацию Windows, если необходимо. Иначе будет использоваться форма ввода логина и пароля.
- Настройте файл
keytabдля аутентификации сервисов и пользователей в Kerberos. - Включите вход через SSO в Яндекс Браузере с помощью групповых политик.
Шаг 1. Настройте IWA (опционально)
При аутентификации ADFS динамически определяет режим работы в зависимости от User-Agent пользователя:
- IWA (Integrated Windows Authentication);
- form-based (аутентификация через форму ввода логина и пароля).
Если нужно использовать аутентификацию IWA, задайте для User-Agent уникальное значение:
-
На ADFS включите IWA для подмененного User-Agent (например,
UniqueSpecialValue) с помощью команды:Set-AdfsProperties -WIASupportedUserAgents ((Get-AdfsProperties).WIASupportedUserAgents + "=~Windows\s*NT.*UniqueSpecialValue") -
Во всем домене задайте групповые политики:
- AuthServerAllowlist — список серверов (в том числе прокси-серверов), для которых аутентификация по технологии единого входа (SSO) включена. Пример:
https://sts.mydomain.com. - UserAgentSpoofing — включите режим подмены
default. Пример:
{"default":{"UniqueSpecialValue/0.1":["sts.mydomain.com"]}}
- AuthServerAllowlist — список серверов (в том числе прокси-серверов), для которых аутентификация по технологии единого входа (SSO) включена. Пример:
Шаг 2. Настройте файл keytab
Чтобы аутентифицировать пользователя, сервис использует протокол Kerberos. Для этого сервису требуется файл keytab (key tables). В нем хранятся ключи шифрования от доменной учетной записи, ассоциированной с сервисом. keytab позволяет сервису расшифровать билеты Kerberos (TGS), с которыми могут приходить запросы от пользователей. TGS-билет пользователя, присылаемый браузером, содержит информацию о пользователе, достаточную для однозначной аутентификации сервером.
Файл содержит пары ключ-значение, где значением является долговременный ключ (хеш от пароля учетной записи, ассоциированной с сервисом, в разных системах хеширования), а ключ зависит от настраиваемого приложения. В зависимости от приложения ключом может выступать SPN (Service Principal Name) или UPN (User Principal Name) или другой строковый идентификатор.
Создание файла keytab
-
Создайте в Active Directory (AD) целевую учетную запись, например
user_accountсо случайным паролем. В ней:- включите опцию This account supports Kerberos AES 256 bit encryption;
- убедитесь, что атрибут
userPrincipalNameпустой, или очистите его и после этого обязательно смените пароль.
-
Определите SPN (Service Principal Name) — присвойте сервису уникальное имя принципала.
Для подключения к сервису браузеры всегда используют SPN в форматеHTTP/<доменное имя>, но поведение может меняться.
Пример:HTTP/webserver.example.com@EXAMPLE.COM. Префикс всегда будетHTTP, даже если пользователь подключается по протоколуHTTPS.Важно
SPN должен быть уникальным в домене: дубликаты приведут к ошибкам аутентификации.
-
Зарегистрируйте SPN для учетной записи.
В Windows используйте утилиту
setspn:setspn -S HTTP/webserver.example.com user_accountГде:
HTTP— класс сервиса (для веб-сервера);myservice.example.com— полное DNS-имя (FQDN) вашего сервиса, который будет использоваться клиентами;user_account— имя учетной записи службы в AD, которая ассоциирована с сервисом.
Опции:
-S— безопасно добавляет SPN (проверяет дубликаты);-A— добавляет без проверки (не рекомендуется).
-
Создайте файл
keytab:WindowsLinuxСоздайте файл с помощью утилиты
ktpass:ktpass /out C:\path\to\file.keytab /ptype KRB5_NT_PRINCIPAL /pass "StrongPassword123!" /crypto AES256-SHA1 /rawsalt "DOMAIN.FQDNusername" /dumpsalt /princ "HTTP/webserver.example.ru@LD.EXAMPLE.RU"Где:
-
/ptype— тип принципала (обычноKRB5_NT_PRINCIPAL). -
/pass— пароль учетной записи.Внимание
Параметр
/passлучше опустить, иначе пароль сохранится в логах командной строки. Если вы опустите параметр, пароль будет запрошен интерактивно. -
/crypto— алгоритм шифрования (рекомендуется AES256-SHA1). -
/rawsalt— обязательно в таком формате, при этомDOMAIN.FQDN— прописными буквами, аusername(логин сервисной учетной записи) — строчными. -
/princ— полный принципал сервиса, может содержать как SPN (обычно), так и UPN или любую другую строку.
Каждый сервис может использовать собственный алгоритм выбора значений из файлаkeytab.Основные свойства SPN и UPN
Характеристика
SPN
UPN
Принадлежность
Служба (сервис)
Пользователь
Формат
<service>/<host>.domain<user>@domainПример
HTTP/web.example.comalice@example.comГде используется
Аутентификация клиентов к службе
Вход пользователя в систему
Кто регистрирует
Администратор/система (через setspn и т. п.)
Администратор (в свойствах пользователя AD)
Если необходимо, добавьте значения в
keytabс помощью команд:ktpass /in file.keytab /out file.keytab /ptype KRB5_NT_PRINCIPAL /crypto AES256-SHA1 /rawsalt "DOMAIN.FQDNusername" /dumpsalt /princ "HTTP/abcdefg2.ld.example.net" /pass *-
Через утилиту
ktutil(вручную):ktutil: addent -password -p HTTP/webserver.example.com@EXAMPLE.COM -k 1 -e aes256-cts -s DOMAIN.FQDNusername ktutil: wkt /path/to/file.keytab ktutil: quitОпция
-sуказывается строго в таком формате, при этомDOMAIN.FQDN— прописными буквами, аusername(логин сервисной учетной записи) — строчными. -
Через инструменты дистрибутива (например, для FreeIPA):
ipa-getkeytab -s ipa.example.com -p HTTP/webserver.example.com -k /path/to/file.keytab
Файл
keytabможет содержать произвольное количество строк, в том числе от разных учетных записей. Для каждой учетной записи может быть несколько строк с разным алгоритмом шифрования. -
-
Проверьте содержимое файла
keytabс помощью утилитыklist(для Linux) или сторонних утилит. Пример команды:WindowsLinuxktpass /in path_to_file/keytabklist -k /path_to_file/keytab -
Разместите
keytabна сервере сервиса:-
по безопасному каналу передайте файл на машину, где работает сервис;
-
установите права доступа с помощью команд:
chmod 600 /path_to_file/keytab chown service_user:service_group /path_to_file/keytab -
укажите путь к
keytabв конфигурации сервиса (например, в Apache, Nginx, Tomcat, SQL Server).
-
-
Настройте сервис для использования
keytab. В конфигурационных файлах укажите:- путь к
keytab; - принципал сервиса;
- параметры Kerberos (realm, KDC и т. п.).
- путь к
Важные рекомендации
Безопасность keytab
Если злоумышленник получает доступ к файлу keytab, он может получить доступ к учетной записи сервиса. Это дает ему полный контроль над сервисом. Файл должен быть доступен только сервису, который его использует. Чтобы обезопасить себя:
- Не передавайте
keytabпо незашифрованным каналам. - Храните резервные копии в защищенном месте.
Синхронизация паролей
- Если вы изменили пароль учетной записи, создайте новый файл
keytab. Предыдущий файл станет недействительным. - Чтобы файл
keytabобновлялся при смене паролей, используйте скрипты автоматизации.
Алгоритмы шифрования
- Используйте AES256-SHA1.
- Избегайте устаревших типов (RC4-HMAC, DES) из-за уязвимостей.
Проверка работоспособности
После настройки протестируйте аутентификацию с помощью команды:
kinit -k -t /path/to/file.keytab HTTP/webserver.example.com@EXAMPLE.COM
Если команда прошла без ошибок — keytab корректен.
Шаг 3. Включите вход через SSO в Яндекс Браузере
Чтобы настроить технологию единого входа:
- Включите политику AuthServerAllowlist и укажите список серверов (в том числе прокси-серверов), для которых аутентификация по технологии единого входа (SSO) будет включена по умолчанию.
- Включите политику AuthNegotiateDelegateAllowlist и укажите список серверов Kerberos для передачи прав.
- Перезапустите Браузер.
-
Создайте папку, выполнив в консоли команду:
mkdir -p /etc/opt/yandex/browser/policies/managed/ -
В папке
managedсоздайте файлmydomain.jsonи добавьте в него код:{ "AuthServerAllowlist": "*.domain", "AuthNegotiateDelegateAllowlist": "*.domain" }где
*.domain— имя Kerberos-области (realm).
Полезные ссылки
Промостраница Яндекс Браузера для организаций
Идентификатор службы для Kerberos, нужен для безопасного подключения клиентов.
Удобное имя пользователя для входа, аналог «email-подобного» логина в домене.