Настройка SSO через Kerberos

Поддерживается в:
Десктопная версия
Мобильная версия

Чтобы настроить технологию единого входа через Kerberos, выполните шаги:

  1. Настройте IWA — встроенную аутентификацию Windows, если необходимо. Иначе будет использоваться форма ввода логина и пароля.
  2. Настройте файл keytab для аутентификации сервисов и пользователей в Kerberos.
  3. Включите вход через SSO в Яндекс Браузере с помощью групповых политик.

Шаг 1. Настройте IWA (опционально)

При аутентификации ADFS динамически определяет режим работы в зависимости от User-Agent пользователя:

Если нужно использовать аутентификацию IWA, задайте для User-Agent уникальное значение:

  1. На ADFS включите IWA для подмененного User-Agent (например, UniqueSpecialValue) с помощью команды:

    Set-AdfsProperties -WIASupportedUserAgents ((Get-AdfsProperties).WIASupportedUserAgents + "=~Windows\s*NT.*UniqueSpecialValue")
    
  2. Во всем домене задайте групповые политики:

    • AuthServerAllowlist — список серверов (в том числе прокси-серверов), для которых аутентификация по технологии единого входа (SSO) включена. Пример: https://sts.mydomain.com.
    • UserAgentSpoofing — включите режим подмены default. Пример:
      {"default":{"UniqueSpecialValue/0.1":["sts.mydomain.com"]}}

Шаг 2. Настройте файл keytab

Чтобы аутентифицировать пользователя, сервис использует протокол Kerberos. Для этого сервису требуется файл keytab (key tables). В нем хранятся ключи шифрования от доменной учетной записи, ассоциированной с сервисом. keytab позволяет сервису расшифровать билеты Kerberos (TGS), с которыми могут приходить запросы от пользователей. TGS-билет пользователя, присылаемый браузером, содержит информацию о пользователе, достаточную для однозначной аутентификации сервером.

Файл содержит пары ключ-значение, где значением является долговременный ключ (хеш от пароля учетной записи, ассоциированной с сервисом, в разных системах хеширования), а ключ зависит от настраиваемого приложения. В зависимости от приложения ключом может выступать SPN (Service Principal Name) или UPN (User Principal Name) или другой строковый идентификатор.

Создание файла keytab

  1. Создайте в Active Directory (AD) целевую учетную запись, например user_account со случайным паролем. В ней:

    • включите опцию This account supports Kerberos AES 256 bit encryption;
    • убедитесь, что атрибут userPrincipalName пустой, или очистите его и после этого обязательно смените пароль.
  2. Определите SPN (Service Principal Name) — присвойте сервису уникальное имя принципала.
    Для подключения к сервису браузеры всегда используют SPN в формате HTTP/<доменное имя>, но поведение может меняться.
    Пример: HTTP/webserver.example.com@EXAMPLE.COM. Префикс всегда будет HTTP, даже если пользователь подключается по протоколу HTTPS.

    Важно

    SPN должен быть уникальным в домене: дубликаты приведут к ошибкам аутентификации.

  3. Зарегистрируйте SPN для учетной записи.

    В Windows используйте утилиту setspn:

    setspn -S HTTP/webserver.example.com user_account
    

    Где:

    • HTTP — класс сервиса (для веб-сервера);
    • myservice.example.com — полное DNS-имя (FQDN) вашего сервиса, который будет использоваться клиентами;
    • user_account — имя учетной записи службы в AD, которая ассоциирована с сервисом.

    Опции:

    • -S — безопасно добавляет SPN (проверяет дубликаты);
    • -A — добавляет без проверки (не рекомендуется).
  4. Создайте файл keytab:

    Создайте файл с помощью утилиты 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.com

      alice@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 может содержать произвольное количество строк, в том числе от разных учетных записей. Для каждой учетной записи может быть несколько строк с разным алгоритмом шифрования.

  5. Проверьте содержимое файла keytab с помощью утилиты klist (для Linux) или сторонних утилит. Пример команды:

    ktpass /in path_to_file/keytab
    
    klist -k /path_to_file/keytab
    
  6. Разместите keytab на сервере сервиса:

    • по безопасному каналу передайте файл на машину, где работает сервис;

    • установите права доступа с помощью команд:

      chmod 600 /path_to_file/keytab
      chown service_user:service_group /path_to_file/keytab
      
    • укажите путь к keytab в конфигурации сервиса (например, в Apache, Nginx, Tomcat, SQL Server).

  7. Настройте сервис для использования 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 в Яндекс Браузере

Чтобы настроить технологию единого входа:

  1. Включите политику AuthServerAllowlist и укажите список серверов (в том числе прокси-серверов), для которых аутентификация по технологии единого входа (SSO) будет включена по умолчанию.
  2. Включите политику AuthNegotiateDelegateAllowlist и укажите список серверов Kerberos для передачи прав.
  3. Перезапустите Браузер.
  1. Создайте папку, выполнив в консоли команду:

    mkdir -p /etc/opt/yandex/browser/policies/managed/
    
  2. В папке managed создайте файл mydomain.json и добавьте в него код:

    {
      "AuthServerAllowlist": "*.domain",
      "AuthNegotiateDelegateAllowlist": "*.domain"
    }
    

    где *.domain — имя Kerberos-области (realm).


Также вы можете перейти на сервис

favicon Яндекс Браузера для организаций



Полезные ссылки

Промостраница Яндекс Браузера для организаций

Идентификатор службы для Kerberos, нужен для безопасного подключения клиентов.

Удобное имя пользователя для входа, аналог «email-подобного» логина в домене.