Настройка Kerberos-аутентификации
- Данные, используемые в документации для примера настройки
- Создание SPN и keytab-файла
- Настройка сервера приложений
- Настройка браузера
- Проверка работы 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), выполните следующие действия:
-
Создайте учетную запись пользователя (User Logon Name = naumen-spnego) в Active Directory с помощью Active Directory Users and Computers:
- при создании снимите флажок "User must change password at next logon";
- введите и запомните пароль (myP@ssw0rd).
Убедитесь, что в Active Directory нет учетной записи компьютера с таким же именем.
-
Выполните настройки:
3.1. Создайте SPN, привязанный к служебной учетной записи, и сгенерируйте keytab-файл, который будет использован для аутентификации сервером приложения, с помощью команды:
ktpass -princ HTTP/srv-app.local@MSK.EXAMPLE.COM -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 — realm, для которого выписывается keytab-файл. Указывается название домена большими буквами.
- -mapuser naumen-spnego@msk.example.com — имя служебной учетной записи, к которой привязывается SPN.
-
-pass myP@ssw0rd — пароль служебной учетной записи, указанной после опции -mapuser.
Пароль должен совпадать с паролем, установленным для служебной учетной записи.
- -SetPass — отключение принудительной установки указанного пароля служебной учетной записи.
- -out c:\TEMP\naumen.keytab — путь, по которому будет сформирован keytab-файл
Если в профиле пользователя AD включены два типа шифрования, то тип шифрования ключа в keytab-файле нужно указать как -crypto ALL
В результате будет создан файл naumen.keytab.
3.2. После генерации keytab-файла пароль служебной учетной записи naumen-spnego не должен меняться, иначе keytab-файл окажется невалидным. При необходимости сменить пароль учетной записи необходимо повторно запустить указанную выше команду и сгенерировать новый keytab-файл.
Имя хоста в SPN должно соответствовать полному доменному имени сервера приложения.
3.3. Чтобы использовать для доступа к серверу приложения дополнительные имена (при наличии дополнительных записей 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
-
- Выведите список SPN, привязанных к учетной записи, и убедитесь в их корректности с помощью команды:
setspn -L msk.example.com\naumen-spnego
- Безопасно скопируйте keytab-файл на сервер приложения (например, программой WinSCP) в любой каталог (например, /opt/naumen/nausd4/conf/naumen.keytab).
Сдвиг по времени системных часов компьютеров, входящих в инфраструктуру Kerberos, является достаточно распространенной проблемой в настройке. Разница системного времени не должна превышать 5 мин.
Настройка сервера приложений
Настройка krb5.conf (krb5.ini)
Имя области аутентификации (REALM) задается в системном файле:
В файле krb5.conf (krb5.ini) пропишите имя области аутентификации (имя домена заглавными буквами):
[libdefaults] default_realm = MSK.EXAMPLE.COM
Настройка параметров аутентификатора (dbaccess.properties)
Описание всех параметров настройки аутентификации в файле dbaccess.properties, см. Аутентификация и авторизация.
Чтобы настроить параметры аутентификатора в конфигурационном файле dbaccess.properties:
-
Добавьте аутентификатор "SPNEGO" в список используемых типов аутентификаторов
Пример:
ru.naumen.core.authentication.authenticators=SPNEGO,INTERNAL
-
Укажите необходимые параметры аутентификатора (SPN, путь до keytab-файла):
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 (krb5.ini). Realm указывается через символ "@" после имени SPN: "HTTP/srv-app.local@MSK.EXAMPLE.COM".
В параметре ru.naumen.core.authentication.spnego-authenticator.keytab указывается путь до keytab-файла, путь обязательно должен содержать префикс "file:". Также в значении параметра можно использовать переменную (conf) ${ext.prop.dir} — путь до каталога конфигурации приложения: "file:${ext.prop.dir}/naumen.keytab".
В параметре ru.naumen.core.authentication.spnego-authenticator.keytab-spn-map указывается словарь, содержащий пары (spn + realm) - (keytab) для прозрачной авторизации в нескольких доменах с разным паролем пользователя. По умолчанию параметр пуст и используются настройки ru.naumen.core.authentication.spnego-authenticator.keytab, ru.naumen.core.authentication.spnego-authenticator.service-principal.
Параметр ru.naumen.core.authentication.spnego-authenticator.debug рекомендуется устанавливать в "true". Дополнительный вывод не может значительно увеличить объем журналов приложения.
- Перезапустите сервис приложения, чтобы изменения конфигурации вступили в силу.
В пути до keytab-файла рекомендуется использовать прямой слеш "/" независимо от используемой операционной системы. Обратный слеш "\" в сочетании с некоторыми символами может быть интерпретирован Java как управляющий символ.
Настройка браузера
Настройка рабочего места пользователя сводится к конфигурации браузера.
Чтобы настроить браузер Mozilla Firefox, выполните следующие действия:
- Запустите Mozilla Firefox.
- В адресной строке введите "about:config" и нажмите Enter.
- В поле "Поиск" (Filter) введите "negotiate", чтобы ограничить список опций.
- Выполните двойное нажатие мышью на строке с параметром "network.negotiate-auth.trusted-uris".
-
В диалоговом окне введите:
- Чтобы разрешить SPNEGO аутентификацию только по конкретной ссылке, введите полностью домен из ссылки (например, "support.msk.example.com").
- Чтобы разрешить SPNEGO аутентификацию для целого домена, введите имя домена с точкой в начале (например,".msk.example.com").
- Чтобы разрешить SPNEGO аутентификацию для нескольких доменов, введите их через запятую. После запятой можно ставить пробел.
Настройка браузера заключается в добавлении параметра запуска --auth-server-whitelist="*.msk.example.com".
Чтобы добавить параметр запуска, выполните следующие действия:
- Кликните правой кнопкой мыши на ярлыке "Google Chrome".
- Выберите "Свойства".
- В поле "Объект" к строке запуска браузера допишите "--args --auth-server-whitelist="*.msk.example.com"".
Пример:
"C:\Program Files\Google\Chrome\Application\chrome.exe" --args --auth-server-whitelist="*.msk.example.com"
Альтернативным вариантом настройки является настройка
Настройка браузера заключается в добавлении сайта в местную сеть Интранет (Intranet).
Добавление сайта в местную сеть Интранет (Intranet)
Чтобы настроить браузер Internet Explorer, выполните следующие действия:
- Запустите Internet Explorer.
- Откройте окно "Свойства браузера" (Internet Options) ("Сервис" (Tools) → "Свойства браузера" (Internet Options)).
- Перейдите на вкладку "Безопасность" (Security).
- Выберете зону "Местная интрасеть" (Local Intranet) и нажмите кнопку Узлы (Sites).
- В диалоговом окне убедитесь, что флажок "Автоматически определять принадлежность к интрасети" (Include all sites that bypass the proxy server) установлен и нажмите кнопку Дополнительно (Advanced).
- В диалоговом окне "Местная интрасеть" (Local Intranet) добавьте все относительные доменные имена, которые будут использоваться в сети Интранет (например, *.msk.example.com или просто support.msk.example.com).
- Нажмите OK и закройте диалоговое окно.
При стандартных настройках этого должно быть достаточно для работы прозрачной аутентификации в приложении.
Проверки при ошибке
Если после добавления сайта в сеть Интранет при переходе в приложение возникает ошибка, выполните проверки:
- Установлена ли автоматическая аутентификация для зоны Intranet:
- перейдите на вкладку "Безопасность" (Security), выберете зону "Местная интрасеть" (Local Intranet) и нажмите кнопку Другой... (Custom Level);
- в диалоговом окне "Параметры безопасности" (Security Settings) прокрутите вниз список к секции "Проверка подлинности пользователя" (User Authentication) и выберете "Автоматический вход в сеть только в зоне интрасети" (Automatic logon only in Intranet zone). Эта настройка позволит пользователям избавиться от повторного ввода логина и пароля;
- нажмите "OK", чтобы закрыть диалоговое окно.
- Проверьте настройки Proxy:
- перейдите на вкладку "Подключения" (Connections);
- нажмите кнопку Настройка сети (LAN Settings);
- проверьте правильность ввода адреса proxy сервера и номера порта, затем нажмите кнопку Дополнительно (Advanced);
- в диалоговом окне "Параметры прокси-сервера" (Proxy Settings) убедитесь, что все требуемые доменные имена указаны в поле "Исключения" (например, *.msk.example.com);
- нажмите "OK", чтобы закрыть диалоговое окно.
- Проверьте разрешение на использование встроенной аутентификации:
- перейдите на вкладку "Дополнительно" (Advanced);
- в разделе "Безопасность" (Security) установите флажок "Разрешить встроенную проверку подлинности Windows" (Enable Integrated Windows Authentication);
- нажмите кнопку OK.
Настройка браузера заключается в добавлении сайта в местную сеть Интранет (Intranet).
Настройка браузера Microsoft Edge выполняется через панель управления Windows.
Добавление сайта в местную сеть Интранет (Intranet)
Чтобы выполнить настройку:
-
Откройте панель управления (Control Panel) и выберите "Свойства браузера" (Internet Options).
- Перейдите на вкладку "Безопасность" (Security).
- Выберете зону "Местная интрасеть" (Local Intranet) и нажмите кнопку Узлы (Sites).
- В диалоговом окне убедитесь, что флажок "Автоматически определять принадлежность к интрасети" (Include all sites that bypass the proxy server) установлен и нажмите кнопку Дополнительно (Advanced).
- В диалоговом окне "Местная интрасеть" (Local Intranet)" добавьте все относительные доменные имена, которые будут использоваться в сети Интранет (например, — "*.msk.example.com" или просто "support.msk.example.com").
- Нажмите OK и закройте диалоговое окно.
При стандартных настройках этого должно быть достаточно для работы прозрачной аутентификации в приложении.
Проверки при ошибке
Если после добавления сайта в сеть Интранет при переходе в приложение возникает ошибка, выполните проверки:
- Установлена ли автоматическая аутентификация для зоны Intranet:
- перейдите на вкладку "Безопасность" (Security), выберете зону "Местная интрасеть" (Local Intranet) и нажмите кнопку Другой... (Custom Level);
- в диалоговом окне "Параметры безопасности" (Security Settings) прокрутите вниз список к секции "Проверка подлинности пользователя" (User Authentication) и выберете "Автоматический вход в сеть только в зоне интрасети" (Automatic logon only in Intranet zone). Эта настройка позволит пользователям избавиться от повторного ввода логина и пароля;
- нажмите OK, чтобы закрыть диалоговое окно.
- Проверьте разрешение на использование встроенной аутентификации:
- перейдите на вкладку "Дополнительно" (Advanced);
- в разделе "Безопасность" (Security) установите флажок "Разрешить встроенную проверку подлинности Windows" (Enable Integrated Windows Authentication);
- нажмите кнопку OK.
Yandex Browser для организаций
Редакция "Yandex Browser для организаций" отличается возможностью централизованной настройки на уровне групповых политик.
Настройка прозрачной аутентификации для этой редакции описана в официальной документации.
Yandex Browser "Домашняя редакция"
Настройка заключается в добавлении параметра запуска --auth-server-whitelist="*.msk.example.com".
Чтобы добавить параметр запуска, выполните следующие действия:
- Наведите курсор на ярлык "Yandex Browser" и нажмите правую клавишу мыши.
- В контекстном меню выберите "Свойства".
-
В поле "Объект" к строке запуска браузера допишите
--args --auth-server-whitelist="*.msk.example.com".
Пример:
"C:\Users\Username\AppData\Local\Yandex\YandexBrowser\Application\browser.exe" --args --auth-server-whitelist="*.msk.example.com"
Альтернативным вариантом настройки является настройка
Проверка работы Kerberos-аутентификации
Логирование ошибок аутентификации
Отображение ошибок аутентификации в логе приложения настраивается в конфигурационном файле:
Для настройки логирования ошибок аутентификации выполните действия:
-
Добавьте в конец конфигурационного файла log4j2.properties следующие строки:
# Общие части аутентификаторов logger.springauth.name=org.springframework.security.authentication logger.springauth.level=DEBUG # Логеры Kerberos/SPNEGO аутентификатора logger.secserver.name=ru.naumen.sec.server logger.secserver.level=DEBUG logger.sepnego.name=ru.naumen.sec.server.spnego logger.sepnego.level=DEBUG
- Перезапустите приложение. Ошибки аутентификации будут попадать в лог приложения.
Проведение проверки работы Kerberos-аутентификации
Для проверки работы Kerberos-аутентификации выполните действия:
- Добавьте в приложении пользователя с логином myuser@msk.example.com вручную или с помощью импорта.
- Войдите в ОС Microsoft Windows под данным пользователем.
- Настройте браузер по инструкции, см. Настройка браузера.
-
Перейдите в браузере по ссылке: https://support.msk.example.com/sd/operator.
Вход должен осуществиться автоматически без запроса логина или пароля.