Настройка Kerberos-аутентификации

Данные, используемые в документации для примера настройки

Данные, используемые в документации для примера настройки Kerberos-аутентификации:

  • Домен: msk.example.com

    Полное имя домена аутентификации (домен, в котором зарегистрированы пользователи)

  • Второй домен: spb.example.com

    Полное имя второго домена аутентификации (используется для примеров с мультидоменной конфигурацией)

  • Сервер приложений: srv-app.local

    DNS A-запись сервера приложения

  • Ссылка на приложение: https://support.msk.example.com

    Ссылка, по которой пользователи работают в приложении. Домен может не совпадать с доменом аутентификации и взят для примера.

  • Служебная учетная запись: naumen-spnego@msk.example.com

    Пользователь, к которому привязывается SPN

  • Пароль служебной учетной записи: myP@ssw0rd

    Пароль пользователя, к которому привязывается SPN. Используется при генерации keytab-файла

  • Пользователь-клиент: myuser@msk.example.com

    Пользователь-клиент приложения

  • Realm: MSK.EXAMPLE.COM, SPB.EXAMPLE.COM

    Область аутентификации Kerberos. Записывается заглавными буквами. Соответствует полному имени домена аутентификации

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

Чтобы настроить сервер аутентификации в инфраструктуре Kerberos (Key Distribution Center), выполните следующие действия:

  1. Создайте учетную запись пользователя (User Logon Name = naumen-spnego) в Active Directory с помощью Active Directory Users and Computers:

    • при создании снимите флажок User must change password at next logon;
    • введите и запомните пароль (myP@ssw0rd).

    Убедитесь, что в Active Directory нет учетной записи компьютера с таким же именем.

  2. В параметрах созданного аккаунта (Account options) включите AES128 kerberos шифрование, в Java 17 это минимально допустимый тип шифрования kerberos.

    При переходе на Java 17 перестало поддерживаться шифрование arcfour-hmac, поэтому требуется перегенерировать keytab-файл, если в нем использовано только такое шифрование

  3. Создайте SPN, привязанный к служебной учетной записи, и сгенерируйте keytab-файл, который будет использован для аутентификации сервером приложения, с помощью команды:

    ktpass -princ HTTP/srv-app.local@MSK.EXAMPLE.COM -crypto AES128-SHA1 -mapuser naumen-spnego@msk.example.com -pass myP@ssw0rd -SetPass -out c:\TEMP\naumen.keytab

    где

    • -princ HTTP/srv-app.local@MSK.EXAMPLE.COM — principal name, сформированный по следующему принципу:

      • HTTP/srv-app.local — SPN, составленный из специального префикса HTTP/ (не указывать HTTPS!) и имени сервера, на котором работает приложение
      • @MSK.EXAMPLE.COM — реалм, для которого выписывается keytab. Указывается название домена большими буквами..
    • -crypto AES128-SHA1 — тип шифрования ключа в keytab-файле, рекомендуемые значения AES128-SHA1 или AES256-SHA1, выбранный тип шифрования должен быть включен в параметрах служебной учетной записи
    • -mapuser naumen-spnego@msk.example.com — имя служебной учетной записи, к которой привязывается SPN.
    • -pass myP@ssw0rd — пароль служебной учетной записи, указанной после опции -mapuser. Если пароль не совпадает с действительным паролем этой учетной записи, то keytab считается невалидным.
    • -SetPass — отключение сброса пароля на служебной учетной записи к значению указанному после опции -pass.
    • -out c:\TEMP\naumen.keytab — путь, по которому будет сформирован keytab-файл

    Если в профиле пользователя AD включены два типа шифрования, то тип шифрования ключа в keytab-файле нужно указать как -crypto ALL

    В результате будет создан файл naumen.keytab.

    После генерации keytab-файла пароль служебной учетной записи naumen-spnego не должен меняться, иначе keytab-файл окажется невалидным. При необходимости сменить пароль учетной записи перегенерируйте keytab-файл повторным запуском указанной выше команды.

    Имя хоста в SPN должно соответствовать полному доменному имени сервера приложения.

  4. Чтобы использовать для доступа к серверу приложения дополнительные имена (при наличии дополнительных записей DNS типа CNAME), зарегистрируйте SPN на основное DNS-имя и добавьте SPN для всех дополнительных записей типа CNAME, с помощью команды:

    setspn -A HTTP/support.msk.example.com@MSK.EXAMPLE.COM msk.example.com\naumen-spnego

    где support.msk.example.com — CNAME на основной домен srv-app.local

  5. Выведите список SPN, привязанных к учетной записи, и убедитесь в их корректности с помощью команды:

    setspn -L msk.example.com\naumen-spnego

  6. Безопасно скопируйте keytab-файл на сервер приложения, например, программой WinSCP, в любой каталог, например, /opt/naumen/nausd4/conf/naumen.keytab.

Сдвиг по времени системных часов компьютеров, входящих в инфраструктуру Kerberos, является достаточно распространенной проблемой в настройке. Разница системного времени не должна превышать 5 мин.

Настройка сервера приложений

Настройка krb5.conf (krb5.ini)

Имя области аутентификации (REALM) задается в системном файле: /etc/krb5.conf для Linux.

В файле krb5.conf пропишите имя области аутентификации (имя домена заглавными буквами):

[libdefaults]
   default_realm = MSK.EXAMPLE.COM

Настройка параметров аутентификатора (dbaccess.properties)

Описание всех параметров настройки аутентификации в файле dbaccess.properties (раздел Аутентификация и авторизация).

Чтобы настроить параметры аутентификатора в конфигурационном файле dbaccess.properties:

  1. Добавьте аутентификатор SPNEGO в список используемых типов аутентификаторов.

    ru.naumen.core.authentication.authenticators=SPNEGO,INTERNAL

  2. Укажите необходимые параметры аутентификатора (SPN, путь до keytab-файла):

    Copy
    ru.naumen.core.authentication.authenticators=SPNEGO,INTERNAL
    ru.naumen.core.authentication.spnego-authenticator.service-principal=HTTP/srv-app.local
    ru.naumen.core.authentication.spnego-authenticator.keytab=file:/opt/naumen/nausd4/conf/naumen.keytab
    ru.naumen.core.authentication.spnego-authenticator.debug=true
    • ru.naumen.core.authentication.spnego-authenticator.service-principal — SPN, для которого выписан keytab. Возможно дополнительно явно указать realm, тогда можно не указывать default_realm в krb5.conf. Realm указывается через символ @ после имени SPN: HTTP/srv-app.local@MSK.EXAMPLE.COM.
    • ru.naumen.core.authentication.spnego-authenticator.keytab — путь до keytab-файла, путь обязательно должен содержать префикс file:.

      Также можно использовать переменную, содержащую путь к каталогу с конфигурационными файлами приложения ${ext.prop.dir}: file:${ext.prop.dir}/naumen.keytab.

      В пути до keytab-файла рекомендуется использовать прямой слеш / не зависимо от используемой операционной системы. Обратный слеш \ в сочетании с некоторыми символами может быть интерпретирован Java как управляющий символ.

    • ru.naumen.core.authentication.spnego-authenticator.debug — рекомендуется устанавливать в true. Дополнительный вывод не может значительно увеличить объем журналов приложения.
  3. Перезапустите сервис приложения, чтобы изменения конфигурации вступили в силу.

Настройка браузера

Настройка рабочего места пользователя сводится к конфигурации браузера.

Mozilla Firefox

Чтобы настроить браузер Mozilla Firefox, выполните следующие действия:

  1. Запустите Mozilla Firefox.
  2. В адресной строке введите about:config и нажмите Enter.
  3. В поле "Поиск" (Filter) введите negotiate, чтобы ограничить список опций.
  4. Выполните двойное нажатие на строке с параметром network.negotiate-auth.trusted-uris.
  5. В диалоговом окне введите:

    • Чтобы разрешить SPNEGO аутентификацию только по конкретной ссылке, введите полностью домен из ссылки, например, support.msk.example.com.
    • Чтобы разрешить SPNEGO аутентификацию для целого домена, введите имя домена с точкой в начале, например, .msk.example.com.
    • Чтобы разрешить SPNEGO аутентификацию для нескольких доменов, введите их через запятую. После запятой можно ставить пробел.

Google Chrome

Настройка браузера заключается в добавлении параметра запуска --auth-server-allowlist="*.msk.example.com".

До 86 версии Chrome этот параметр назывался --auth-server-whitelist.

Чтобы добавить параметр запуска, выполните следующие действия:

  1. Наведите курсор на ярлык Google Chrome и нажмите правую клавишу мыши.
  2. В контекстном меню выберите "Свойства".
  3. В поле "Объект" к строке запуска браузера допишите --args --auth-server-allowlist="*.msk.example.com".

    Пример:

    "C:\Program Files\Google\Chrome\Application\chrome.exe" --args --auth-server-allowlist="*.msk.example.com"

Альтернативным вариантом настройки является настройка Edge по инструкции для соответствующего браузера на одной рабочей станции с Chrome. В этом случае Google Chrome берет системные настройки свойств браузера (Internet Options) и не требует запуска с дополнительными параметрами

Microsoft Edge

Настройка браузера заключается в добавлении сайта в местную сеть Интранет (Intranet).

Настройка браузера Microsoft Edge выполняется через панель управления Windows.

Добавление сайта в местную сеть Интранет (Intranet)

Чтобы выполнить настройку:

  1. Откройте панель управления (Control Panel) и выберите "Свойства браузера" (Internet Options).
  2. Перейдите на вкладку "Безопасность" (Security).
  3. Выберете зону "Местная интрасеть" (Local Intranet) и нажмите кнопку Узлы (Sites).

    Убедитесь, что флажок "Автоматически определять принадлежность к интрасети" (Include all sites that bypass the proxy server) установлен и нажмите кнопку Дополнительно (Advanced).

  4. На форме "Местная интрасеть" (Local Intranet) добавьте все относительные доменные имена, которые будут использоваться в сети Интранет, например, *.msk.example.com или support.msk.example.com.

    Нажмите OK.

При стандартных настройках этого должно быть достаточно для работы прозрачной аутентификации в приложении.

Проверки при ошибке

Если после добавления сайта в сеть Интранет при переходе в приложение возникает ошибка, выполните проверки:

  1. Установлена ли автоматическая аутентификация для зоны Intranet:

    • перейдите на вкладку "Безопасность" (Security), выберете зону "Местная интрасеть" (Local Intranet) и нажмите кнопку Другой... (Custom Level);
    • на форме "Параметры безопасности" (Security Settings) прокрутите вниз список к секции "Проверка подлинности пользователя" (User Authentication) и выберете "Автоматический вход в сеть только в зоне интрасети" (Automatic logon only in Intranet zone). Нажмите OK.

      Эта настройка позволит пользователям избавиться от повторного ввода логина и пароля.

  2. Проверьте разрешение на использование встроенной аутентификации:

    • перейдите на вкладку "Дополнительно" (Advanced);
    • в разделе "Безопасность" (Security) установите флажок "Разрешить встроенную проверку подлинности Windows" (Enable Integrated Windows Authentication). Нажмите кнопку OK.

Yandex Browser

Yandex Browser для организаций

Редакция "Yandex Browser для организаций" отличается возможностью централизованной настройки на уровне групповых политик.

Настройка прозрачной аутентификации для этой редакции описана в официальной документации.

Yandex Browser "Домашняя редакция"

Настройка заключается в добавлении параметра запуска --auth-server-whitelist="*.msk.example.com".

Чтобы добавить параметр запуска, выполните следующие действия:

  1. Наведите курсор на ярлык Yandex Browser и нажмите правую клавишу мыши.
  2. В контекстном меню выберите "Свойства".
  3. В поле "Объект" к строке запуска браузера допишите --args --auth-server-whitelist="*.msk.example.com".

    "C:\Users\Username\AppData\Local\Yandex\YandexBrowser\Application\browser.exe" --args --auth-server-whitelist="*.msk.example.com"

Альтернативным вариантом настройки является настройка Internet Edge по инструкции для соответствующего браузера на одной рабочей станции с Yandex Browser. В этом случае Yandex Browser берет системные настройки свойств браузера (Internet Options) и не требует запуска с дополнительными параметрами.