Дополнительные настройки Kerberos-аутентификации
- Настройка соответствия имен доменов и Realm. Конфигурационный файл realm-rules-config.xml
- Отладка ошибок аутентификации
- Команда setspn
- Просмотр содержимого keytab-файла
- Изменение типа шифрования для keytab-файла
- Настройка прозрачной аутентификации при доступе в приложение по разным ссылкам
- Изменение ссылки на приложение
Настройка соответствия имен доменов и Realm. Конфигурационный файл realm-rules-config.xml
При прозрачной аутентификации приложение пытается найти пользователя в своей базе данных по атрибуту "Логин". Принцип перебора логинов см. Принцип поиска логина во внутренней базе данных при прозрачной аутентификации.
Расширить набор правил поиска логина во внутренней базе данных можно с помощью определения соответствия между доменом пользователя и внутренним наименованием домена.
Внутреннее наименование домена — это часть атрибута "Логин" класса "Сотрудник" (employee), представляющая домен. В зависимости от настроек синхронизации пользователей системы и Active Directory, логины сотрудников могут иметь вид login@domain, login и прочие.
В файле realm-rules-config.xml представлен набор правил, каждое из которых указывает соответствие между определенным наименованием домена внутри приложения и областью аутентификации (realm).
Например, по каким-то причинам логины из домена MSK.EXAMPLE.COM в системе заведены как @example и @example.com. В этом случае логины не могут быть найдены по встроенным правилам поиска. Для расширения правил поиска конфигурационный файл realm-rules-config.xml должен иметь следующий вид:
<?xml version="1.0" encoding="UTF-8"?>
<realm-rules xmlns="http://naumen.ru/xmlschema/core/realm-rules-config/">
<realm-accordance-rule internal-domain="example.com" realm="MSK.EXAMPLE.COM" />
<realm-accordance-rule internal-domain="example" realm="MSK.EXAMPLE.COM" />
</realm-rules>
В свойстве internal-domain определяется внутреннее наименование домена, в realm — имя области аутентификации пользователя.
После указанной настройки поиск логина user@msk.example.com будет дополнительно осуществлен по:
- "user@example.com"
- "user@example"
- "example.com\user"
- "example\user"
Конфигурационный файл realm-rules-config.xml должен находиться в каталоге c конфигурационными файлами приложения. Путь к этому каталогу указывается в java-опции -Dext.prop.dir.
Стандартно путь до конфигурационного файла realm-rules-config.xml следующий [каталог приложения]/conf/realm-rules-config.xml.
В общем случае наличие файла realm-rules-config.xml не обязательно.
Отладка ошибок аутентификации
Настоятельно рекомендуется настроить логирование ошибок аутентификации. Логирование ошибок несущественно увеличивает файл журнала sdng.log, поэтому рекомендуется включить его на постоянной основе.
Отображение ошибок аутентификации в логе приложения настраивается в конфигурационном файле log4j2.properties.
За вывод в лог информации о процессе аутентификации отвечают следующие настройки:
# Поиск авторизованного через службу пользователя в БД SD
logger.authdb.name=ru.naumen.sec.server.employee
logger.authdb.level=DEBUG
# Общие части аутентификаторов
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
# Логеры LDAP & AD аутентификаторов
logger.ldap.name=org.springframework.security.ldap
logger.ldap.level=DEBUG
logger.ldapsearch.name=org.springframework.security.ldap.search
logger.ldapsearch.level=DEBUG
logger.ldapauth.name=org.springframework.security.ldap.authentication
logger.ldapauth.level=DEBUG
logger.nauldap.name=ru.naumen.core.server.ldap
logger.nauldap.level=DEBUG
Указанные настройки включены в шаблоне файла log4j2.properties, который можно скачать с сайта NAUMEN.
Дополнительное логирование на сервере приложения
Для вывода дополнительных сообщений в tomcat/logs/catalina.out добавьте следующую java-опцию сервиса Tomcat:
-Dsun.security.krb5.debug=true
Логирование ошибок на стороне клиента
В некоторых случаях помогает включение записи ошибок Kerberos на клиентской машине, для этого установите ключ реестра через regedit.exe:
Путь: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters
Ключ: LogLevel
Тип: REG_DWORD
Значение: 1
После перезапуска рабочей станции ошибки kerberos будут отображаться в журнале событий Windows (eventvwr.msc) в разделе System.
Команда setspn
Команда setspn используется для управления SPN записями в домене:
-
Добавление SPN к учетной записи:
setspn -A SPN user@domain
-
Удаление SPN:
setspn -D SPN user@domain
-
Список SPN, привязанных к пользователю:
setspn -L user@domain
-
Поиск пользователей, к которым привязан указанный SPN:
setspn -Q SPN
-
Поиск дублей SPN (может работать медленно):
setspn -x
Подробнее о команде setspn можно прочитать в официальной документации Microsoft.
Просмотр содержимого keytab-файла
Существует несколько способов просмотреть список ключей в keytab-файле:
-
Утилита klist
-
ОС Linux. Используется утилита klist:
klist -K -e -t -k ./naumen.keytab
В Ubuntu Server утилита klist является частью пакета krb5-user.
В CentOS/RHEL необходимо установить пакет krb5-workstation.
После запуска утилиты будут выведены все содержащиеся ключи с типом шифрования, realm и SPN, для которого создавался ключ.
-
- Любой текстовый редактор. Keytab-файл является бинарным, но в нем можно найти SPN и realm открытым текстом.
Изменение типа шифрования для keytab-файла
По умолчанию ключи в keytab-файле шифруются с помощью шифрования rc4-hmac.
Чтобы изменить тип шифрования, выполните следующие действия:
-
Установите свойство для служебной учетной записи в Active Directory:
- "Данная учетная запись поддерживает 128-разрядное шифрование";
- "Данная учетная запись поддерживает 256-разрядное шифрование".
-
Сгенерируйте новый keytab-файл с ключом нужного шифрования.
Для этого в команду ktpass передайте опцию /crypto AES128-SHA1 или /crypto AES256-SHA1, см. Создание SPN и keytab-файла.
Если в профиле пользователя AD включены два типа шифрования, то в команду ktpass нужно передать /crypto ALL.
- Скопируйте обновленный keytab-файл на сервер приложения. Путь до файла указан в конфигурационном файле dbaccess.properties (параметр ru.naumen.core.authentication.spnego-authenticator.keytab).
Настройка прозрачной аутентификации при доступе в приложение по разным ссылкам
Чтобы пользователи могли входить в приложение по ссылкам https://support.msk.example.com и https://sc.msk.example.com, выполните следующие действия:
- Если имена support.msk.example.com и sc.msk.example.com являются записями типа CNAME, то для работы прозрачной аутентификации дополнительной настройки не требуется.
-
Если имена support.msk.example.com и sc.msk.example.com являются записями типа A, то создайте дополнительные SPN, соответствующие DNS-именам при помощи команды setspn:
Copysetspn -A HTTP/support.msk.example.com naumen-spnego@msk.example.com
setspn -A HTTP/sc.msk.example.com naumen-spnego@msk.example.com
Изменение ссылки на приложение
Для смены ссылки на приложение добавьте новую CNAME на запись, на которую выписан SPN.
Для новой ссылки добавьте дополнительный SPN:
setspn -A HTTP/sc.msk.example.com msk.example.com\naumen-spnego
Если изменяется A-запись DNS, на которую выписан SPN, то для сохранения работы прозрачной аутентификации необходимо выполнить ряд действий. В примере рассматривается смена адреса приложения с support.msk.example.com на sc.msk.example.com (A-записи DNS).
Для сохранения работы прозрачной аутентификации при изменении ссылки на приложение, выполните следующие действия:
-
Откройте список всех SPN:
setspn -L msk.example.com\naumen-spnego
-
Удалите все существующие SPN (в примере SPN один):
setspn -D HTTP/support.msk.example.com msk.example.com\naumen-spnego
-
Создайте новый keytab-файл:
ktpass -princ HTTP/sc.msk.example.com@MSK.EXAMPLE.COM -mapuser naumen-spnego@msk.example.com -pass myP@ssw0rd -SetPass -out c:\TEMP\naumen.keytab
-
Безопасно скопируйте новый keytab-файл на сервер приложения вместо старого. Путь до файла указан в конфигурационном файле dbaccess.properties (параметр ru.naumen.core.authentication.spnego-authenticator.keytab).
Если имя keytab-файла не изменилось, перезапуск приложения не требуется.