Введение
SPN (Service Principal Name) — уникальный идентификатор экземпляра сервиса. SPN используется аутентификацией Kerberos для сопоставления экземпляра сервиса с учетной записью сервиса (service logon account). Это позволяет клиентским приложением аутентифицироваться в роли сервиса даже не зная имени пользователя.
До того как аутентификация Kerberos сможет использовать SPN для аутентификации сервиса, SPN должен быть привязан к учетной записи, которая будет использоваться для входа. SPN может быть привязан только к одной учетной записи. Если учетная запись, привязанная к SPN, изменяется, то необходимо заново выполнить привязку.
Когда клиент хочет воспользоваться сервисом, он находит экземпляр сервиса и составляет SPN для этого экземпляра, далее использует этот SPN для аутентификации.
Keytab-файл — это файл содержащий пары Kerberos принципалов и их ключей (полученных с использованием Kerberos пароля). Эти файлы используются для аутентификации в системах, использующих Kerberos, без ввода пароля. Если пароль принципала изменится, то keytab-файл необходимо будет сгенерировать заново.
Внимание! Каждый кто имеет разрешения на чтения keytab-файла может воспользоваться любыми ключами в нем. Чтобы предотвратить нежелательное использование, ограничивайте права доступа при создании keytab-файла
Использование
В следующей таблице описаны наиболее типичные сценарии, в которых клиентские приложения могут включить безопасную проверку подлинности.
Сценарий | Описание |
---|---|
Приложение прежней версии не указывает имя участника-службы. | Этот сценарий совместимости гарантирует, что не будет изменений в работе приложений, разработанных для предыдущих версий SQL Server. Если имя участника-службы не указано, то приложение использует сформированные имена участников-служб и ничего не знает об используемом методе проверки подлинности. |
Клиентское приложение, использующее текущую версию SQL Server Native Client, указывает имя субъекта-службы в строке подключения как учетную запись пользователя домена или компьютера, имя субъекта-службы для конкретного экземпляра или определяемую пользователем строку. | Ключевое слово ServerSPN может быть указано в строке поставщика, инициализации или соединения, для следующих целей. Указать учетную запись, используемую экземпляром SQL Server для соединения. Это упрощает доступ к проверке подлинности Kerberos. Если имеется центр распространения ключей Kerberos (KDC) и указана верная учетная запись, то проверка подлинности Kerberos будет предпочтительнее, чем NTLM. KDC обычно размещается на том же компьютере, что и контроллер домена. Указать имя субъекта-службы для поиска учетной записи службы для экземпляра SQL Server. Для каждого экземпляра SQL Server создаются два имени субъекта-службы по умолчанию, которые могут быть использованы для этой цели. Однако эти ключи не обязательно будут созданы в Active Directory, поэтому в такой ситуации проверка подлинности Kerberos не гарантирована. Указать имя субъекта-службы, которое будет использоваться для поиска учетной записи службы для экземпляра SQL Server. Это может быть любая определенная пользователем строка, сопоставляемая с учетной записью службы. В этом случае ключ должен быть вручную зарегистрирован в центре распространения ключей и удовлетворять правилам для определенных пользователем имен участников-служб. Ключевое слово FailoverPartnerSPN указывает имя партнера-службы для сервера-партнера по обеспечению отработки отказа. Ранг учетной записи и ключевые значения Active Directory те же, что и значения, которые можно указать для основного сервера. |
Приложение ODBC указывает имя партнера-службы как атрибут соединения для основного сервера или сервера-партнера по обеспечению отработки отказа. | Атрибут соединения SQL_COPT_SS_SERVER_SPN может быть использован для указания имени участника-службы для соединения с основным сервером. Атрибут соединения SQL_COPT_SS_FAILOVER_PARTNER_SPN может быть использован для указания имени партнера-службы для сервера-партнера по обеспечению отработки отказа. |
Приложение OLE DB указывает имя партнера-службы как свойство инициализации источника данных для основного сервера или сервера-партнера по обеспечению отработки отказа. | Свойство соединения SSPROP_INIT_SERVER_SPN в наборе свойств DBPROPSET_SQLSERVERDBINIT может быть использовано для указания имени участника-службы для соединения. Свойство соединения SSPROP_INIT_FAILOVER_PARTNER_SPN в DBPROPSET_SQLSERVERDBINIT может быть использовано для указания имени партнера-службы для сервера-партнера по обеспечению отработки отказа. |
Пользователь указывает имя партнера-службы для сервера или сервера-партнера по обеспечению отработки отказа в имени источника данных (DSN) ODBC. | Имя участника-службы может быть указано в DSN ODBC через диалоговые окна настройки DSN. |
Пользователь указывает имя партнера-службы для сервера или сервера-партнера по обеспечению отработки отказа в диалоговом окне Связь данных или Имя входа OLE DB. | Имя участника-службы может быть указано в диалоговом окне Связь данных или Имя входа . Диалоговое окно Имя входа может использоваться с ODBC или OLE DB. |
Приложение ODBC определяет метод проверки подлинности, используемый для установления соединения. | Если соединение было установлено успешно, то приложение может запросить атрибут соединения SQL_COPT_SS_INTEGRATED_AUTHENTICATION_METHOD , чтобы определить, какой именно метод проверки подлинности будет использоваться. Эти значения включают NTLM , Kerberosи другие. |
Приложение OLE DB определяет метод проверки подлинности, используемый при установлении соединения. | Если соединение было установлено успешно, то приложение может запросить свойство соединения SSPROP_AUTHENTICATION_METHOD в наборе свойств DBPROPSET_SQLSERVERDATASOURCEINFO для определения метода проверки подлинности, который будет использоваться. Эти значения включают NTLM , Kerberosи другие. |
Сканирование SPN
Когда нужно повысить привилегии, злоумышленники обычно используют учетные записи служб, поскольку у таких учеток больше прав, но нет строгой политики смены пароля через заданный промежуток времени. То есть если скомпрометировать их, то потом можно долго оставаться незамеченным.
INFO
Service Principal Names (SPN) — идентификаторы служб, запущенных на доменной машине. Не зная их, ты не сможешь искать службы, которые используют проверку подлинности Kerberos.
SPN-строка имеет такой формат:
- — строка, которая идентифицирует класс службы, например — идентификатор для службы каталогов;
- — строка, где указывается полное доменное имя системы, а иногда и порт;
- — строка, которая представляет собой уникальное имя (DN), GUID объекта или полностью определенное доменное имя (FQDN) службы.
SPN уникальный в пределах леса. Когда компьютер добавляют в домен, у его учетной записи автоматически указывается host SPN, что позволяет службам на этой машине запускаться из-под локальных учетных записей, таких как Local System и Network Service.
Сканирование SPN — это первое, что обычно делает злоумышленник или пентестер при поиске служб в среде Active Directory. Основное преимущество этого метода по сравнению со сканированием сетевых портов в том, что не требуется взаимодействие с каждым узлом сети для проверки служебных портов. Сканирование SPN позволяет обнаружить службы с помощью запросов LDAP к контроллеру домена. Так как запросы SPN — нормальное поведение проверки подлинности Kerberos, этот способ сканирования обнаружить очень сложно (даже почти нереально), в отличие от сканирования портов.
Выполнить сканирование SPN можно с помощью скрипта на PowerShell.
Результат работы скрипта для серверов Microsoft SQL
Наиболее интересные службы:
- SQL (MSSQLSvc/adsmsSQLAP01.ads.org:1433)
- Exchange (exchangeMDB/adsmsEXCAS01.ads.org)
- RDP (TERMSERV/adsmsEXCAS01.adsecurity.org)
- WSMan / WinRM / PS Remoting (WSMAN/adsmsEXCAS01.ads.org)
- Hyper-V (Microsoft Virtual Console Service/adsmsHV01.ady.org)
- VMware VCenter (STS/adsmsVC01.ads.org)
Хочу поделиться с тобой и еще одним интересным скриптом, который покажет тебе все SPN для всех пользователей и всех компьютеров.
Результат работы cкрипта — список SPN
Общие ресурсы
В среде Active Directory часто используются сетевые папки и файловые серверы. Эти команды отобразят список общих ресурсов на локальном хосте, список сетевых компьютеров и список шар на удаленном компьютере:
Но что делать, если политика безопасности запрещает использовать сетевые команды? В этом случае нас выручит . Список общих ресурсов на локальном хосте и список общих ресурсов на удаленном компьютере можно посмотреть с помощью команд
Полезный инструмент для поиска данных — PowerView. Он автоматически обнаруживает сетевые ресурсы и файловые серверы с помощью команд и .
Кстати, PowerView встроен в фреймворк PowerShell Empire и представлен двумя модулями:
- ;
- .
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку!
Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя!
Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»
Указание имени участника-службы
Имя участника-службы может быть задано как через код, так и через диалоговые окна. В данном разделе рассматривается задание имени участника-службы.
Максимальная длина для имени участника-службы — 260 символов.
В именах участников-служб в атрибутах или строке соединения применяется следующий синтаксис.
Синтаксис | Описание |
---|---|
MSSQLSvc/fqdn | Сформированное поставщиком имя участника-службы для экземпляра по умолчанию, когда используется протокол, отличный от TCP.fqdn — полное имя домена. |
MSSQLSvc/fqdn:port | Сформированное поставщиком имя участника-службы для экземпляра по умолчанию, когда используется протокол TCP.port — номер TCP-порта. |
MSSQLSvc/fqdn:InstanceName | Сформированное поставщиком имя участника-службы (по умолчанию) для именованного экземпляра, когда используется протокол, отличный от TCP.InstanceName — имя экземпляра SQL Server. |
HOST/fqdn HOST/MachineName | Имя участника-службы, сопоставляемое со встроенной учетной записью компьютера, зарегистрированной в Windows автоматически. |
Username@Domain | Прямое указание учетной записи домена.Username — имя учетной записи пользователя Windows.Domain — имя домена Windows или полное имя домена. |
MachineName$@Domain | Прямое указание учетной записи компьютера (если сервер, с которым выполняется соединение, работает с учетными записями LOCAL SYSTEM или NETWORK SERVICE, то для проверки подлинности Kerberos ServerSPN может указываться в формате MachineName$@Domain ). |
KDCKey/MachineName | Заданное пользователем имя участника-службы.KDCKey — алфавитно-цифровая строка, соответствующая правилам для ключей KDC. |
# Термины и определения
термин | описание | пример |
DOMAIN_NAME | название домена | test.com |
REALM | для Active Directory это всегда DOMAIN_NAME в верхнем регистре | TEST.COM |
SERVER_NAME | название компьютера, где установлен RunaWFE Server | runaserver |
SERVER_USER | логин пользователя, под которым работает RunaWFE Server | runauser |
SERVER_SPN | SPN (Service principal name), который соответствует SERVER_USER
Формат FQDN для Windows2008: HTTP/{SERVER_NAME}.{DOMAIN_NAME} Формат FQDN для Windows2003: HTTP/{SERVER_NAME}.{DOMAIN_NAME}@{REALM} Формат NetBIOS для Windows2008: HTTP/{SERVER_NAME} Формат NetBIOS для Windows2003: HTTP/{SERVER_NAME}@{REALM} |
HTTP/runaserver.test.com
HTTP/[email protected] HTTP/runaserver HTTP/[email protected] |
KEYTAB_PATH | Путь к keytab-файлу ключей, хранящему хеши паролей пользователей | C:/runawfe/krb5.keytab |
Инструменты
название | описание | расположение | комментарии |
kinit | Получение тикета TGT из контроллера домена | JDK bin, есть альтернативные реализации | пользователь может быть задан в виде {SERVER_USER} или {SERVER_USER}@{REALM} |
klist | Просмотр полученных тикетов и возможность их удаления из локального кеша | JDK bin, есть альтернативные реализации | |
setspn | Создаёт SPN и назначает его пользователю | входит в Windows Server 2008+, ранее доступен в пакете Windows Server support tools | |
ktpass | Меняет логин пользователя на SPN или формирует keytab файл | входит в Windows Server 2008+, ранее доступен в пакете Windows Server support tools | |
ktab | Формирует keytab файл | JDK bin | |
ADSIEdit | Просмотр свойств пользователя в контроллере домена | Windows Server | |
WireShark | Анализатор траффика |
Описание
этап | протокол | описание | данные запроса | данные ответа | примечания |
KRB | аутентификация пользователя клиента | логин пользователя | тикет TGT | при входе в систему | |
1 | HTTP | вход в систему | без HTTP заголовка Authorization | HTTP 401 | |
2 | KRB | получение сервисного тикета для сервера | {SERVER_SPN} | сервисный тикет | шаг выполняется если тикета ещё нет в кеше клиента |
3 | HTTP | продолжение входа в систему | HTTP заголовок Authorization = YIIV… | HTTP 200 | |
4 | KRB | аутентификация пользователя сервера | {SERVER_SPN} | тикет TGT | выполняется при отсутствии TGT во время взаимодействия с клиентом, происходит до возврата ответа 3 клиенту |
# Настройка kerberos.properties
Создайте файл kerberos.properties в директории {RUNAWFE_JBOSS}/standalone/wfe.custom. Замените в нем имена на настоящие.
# задействовать аутентификацию используя RunaWFE API api.auth.enabled=true appName=com.sun.security.jgss.krb5.accept moduleClassName=com.sun.security.auth.module.Krb5LoginModule principal={SERVER_SPN} storeKey=true useKeyTab=true keyTab={KEYTAB_PATH} doNotPrompt=true # режим отладки аутентификации debug=true # задействовать аутентификацию по протоколу HTTP (из веб-интерфейса) http.auth.enabled=true jcifs.http.enableNegotiate=true # режим отладки аутентификации sun.security.krb5.debug=true jcifs.spnego.servicePrincipal={SERVER_SPN} http.auth.preference=Kerberos
Установка предварительных компонентов
Перед непосредственно установкой Service Manager на сервер управления необходимо установить следующие предварительные компоненты:
- .NET Framework 3.5 SP1 for Windows Server. Его можно установить через Server Manager.
- SQL Server Native client. Его можно загрузить вот тут. Нужна версия для x64 систем.
- Microsoft Report Viewer Redistributable. Его можно будет установить непосредственно из мастера установки Service Manager.
- SQL Server Analysis Management Objects (т.к. на сервере еще будет установлена консоль Service Manager). Компонент можно загрузить вот тут. Необходимо выбрать из пакета компонентов SQL SQL_AS_AMO.msi.
Проверка keytab-файла
Для проверки keytab-файла необходима настроенная Kerberos-аутентификация.
Это можно проверить командой:
kinit [email protected]
Она должна запрашивать пароль и получать билет:
klist Ticket cache: KEYRING:persistent:0:0 Default principal: [email protected] Valid starting Expires Service principal 14.03.2017 16:45:58 15.03.2017 02:45:58 krbtgt/[email protected] renew until 21.03.2017 16:44:36
Попробуем зарегистрироваться с помощью keytab-файла:
kinit -V -k HTTP/sqserver.domg.testg -t /home/test/squid.keytab Using existing cache: persistent:0:krb_ccache_95Lkl2t Using principal: HTTP/[email protected] Using keytab: /home/test/squid.keytab Authenticated to Kerberos v5
Проверить версию ключей на сервере можно, предварительно получив билет, с помощью команды:
kvno HTTP/sqserver.domg.testg HTTP/[email protected]: kvno = 6
Проверить версию kvno и список ключей в keytab-файле можно с помощью команды:
klist -ket /home/test/squid.keytab Keytab name: FILE:/home/test/squid.keytab KVNO Timestamp Principal ---- ------------------- ------------------------------------------------------ 6 01.01.1970 03:00:00 HTTP/[email protected] (arcfour-hmac)
После всех проверок желательно удалить полученные билеты командой:
kdestroy
Подготовка и настройка клиентского браузера
В данном разделе рассматривается процесс настройки аутентификации Kerberos для разных браузеров, чтобы обеспечить прозрачную и безопасную аутентификацию на веб-серверах без необходимости повторного ввода пароля пользователя в корпоративной сети. Большинство современных браузеров (IE, Chrome, Firefox) поддерживают Kerberos, однако для его работы необходимо выполнить несколько дополнительных настроек.
Настройка служб федерации Active Directory (AD FS)
Вам необходимо настроить ADFS на сервере Windows 2016 в вашей среде. Для этой настройки, в диспетчере серверов в разделе «Управление» выберите «Добавить роли и компоненты». Дополнительные сведения см. в документации служб федерации Active Directory.
Создание группы приложений
На экране управления AD FS необходимо создать группу приложений для Reporting Services, которая будет содержать информацию для приложений Power BI Mobile.
Вот как создать группу приложений.
-
В приложении управления AD FS щелкните правой кнопкой мыши Группы приложений и выберите Добавить группу приложений…
-
В мастере добавления группы приложений укажите имя группы приложений и выберите параметр Собственное приложение, подключающееся к веб-API.
-
Укажите имя приложения, которое вы добавляете.
-
Пока будет автоматически создаваться идентификатор клиента, укажите 484d54fc-b481-4eee-9505-0258a1913020 для iOS и Android.
-
Необходимо добавить следующие URL-адреса перенаправления:
Записи для Power BI Mobile для iOS:
msauth://code/mspbi-adal://com.microsoft.powerbimobile
msauth://code/mspbi-adalms://com.microsoft.powerbimobilems
mspbi-adal://com.microsoft.powerbimobile
mspbi-adalms://com.microsoft.powerbimobilemsПриложения Android требуют только следующих шагов:
urn:ietf:wg:oauth:2.0:oob -
Нажмите кнопку Далее.
-
Укажите URL-адрес сервера отчетов. Это внешний URL-адрес, который будет обращаться к прокси-службе веб-приложения. Он должен быть в следующем формате.
Примечание
URL-адрес вводится с учетом регистра.
-
Нажмите кнопку Далее.
-
Выберите политику управления доступом, которая соответствует требованиям вашей организации.
-
Нажмите кнопку Далее.
-
Нажмите кнопку Далее.
-
Нажмите кнопку Далее.
-
Выберите Закрыть.
По завершении свойства вашей группы приложений будут выглядеть приблизительно так:
# Типы шифрования
Выбранный тип шифрования зависит от участников взаимодействия — версии ПО домена (Windows Server), настроек домена, настроек пользователя, настроек ПО клиента.
В ранних версиях (Windows 2000, 2003) настраивали DES, в поздних (Windows 2008, 2012) рекомендуют использованием AES.
Настройки пользователя, оказывающие влияние на поведение Kerberos:
This account supports Kerberos AES 128/256 bit encryption — разрешение использования соответствущего типа шифрования для пользователя
(TODO — при невключённых чекбоксах всё равно использовался AES128)
Use Kerberos DES encryption for this acount — включает шифрование DES для пользователя, после установки чекбокса требуется смена пароля
# krb5.ini
Файл не является обязательным, но может влиять на поведение процесса аутентификации.
На сервере и клиентских машинах Windows он может быть расположен в ${windir}/krb5.ini.
Пример файла krb5.ini
.test.com = TEST.COM test.com = TEST.COM default_realm = TEST.COM kdc_timesync = 1 ccache_type = 4 ticket_lifetime = 600 default_tkt_enctypes = des-cbc-md5 des-cbc-crc des3-cbc-sha1 default_tgs_enctypes = des-cbc-md5 des-cbc-crc des3-cbc-sha1 permitted_enctypes = des-cbc-md5 des-cbc-crc des3-cbc-sha1 kdc = CONSOLE TEST.COM = { kdc = 192.168.0.1 kdc = 192.168.1.1 default_domain = test.com } autologin = true forward = true forwardable = true encrypt = true
Настройка сервера
Данная инструкция сделана в окружении Windows Server2008R2 (контроллер домена), Windows Server2012R2 (RunaWFE Server), Windows7 (RunaWFE client).
В данном разделе регистр может иметь значение, хотя опытным путём было выяснено что логин пользователя, название компьютера сервера и SPN не являются регистрозависимыми.
Создание SPN[править]
DC Windowsправить
Для начала необходимо создать на контроллере домена (DC) пользователя к которому впоследствии мы привяжем SPN.
Например создадим пользователя squid:
Далее необходимо запретить пользователю смену пароля и не ограничивать срок действия пароля
Последнее важно, так как иначе при истечении срока действия пароля придется не только менять пароль, но и заново генерировать keytab-файлы привязанные к этому пользователю:
В целях безопасности рекомендуется исключить сервисного пользователя из доменных групп.
Создадим SPN для прокси-сервера squid HTTP/sqserver.domg.testg и привяжем его к пользователю squid.
Для этого в командной строке на контроллере домена выполним следующую команду:
C:\>setspn -A HTTP/sqserver.domg.testg squid Регистрация ServicePrincipalNames для CN=squid,CN=Users,DC=domg,DC=testg HTTP/sqserver.domg.testg Обновленный объект
Проверить привязанные SPN у пользователя можно командой:
C:\>setspn -L squid Зарегистрирован ServicePrincipalNames для CN=squid3,CN=Users,DC=domg,DC=testg: HTTP/sqserver.domg.testg
DC FreeIPAправить
Для добавления SPN зайдите в web-интерфейс сервера FreeIPA->Identity->Services->Add:
В открывшемся окне необходимо выбрать имя сервиса и имя хоста, к которому будет привязан сервис:
Чтобы добавить SPN с коротким именем хоста (например это необходимо для samba), выполните команду:
# ipa service-add cifs/samba --force
# Команды для выполнения по вышеперечисленным пунктам
На контроллере домена:
setspn -A HTTP/runaserver.test.com runauser
ktpass -princ HTTP/runaserver.test.com -pass * -mapuser runauser
На сервере:
ktab -a HTTP/runaserver.test.com -n 0 -k C:/runawfe/krb5.keytab
Настройка браузера
Для того чтобы браузер пытался использовать Kerberos для аутентификации:
- в нём должна быть включена настройка Enable Integrated Windows Authentication (в некоторых версиях IE её нет)
- настройки зоны безопасности должны позволять её использование, по умолчанию это настроено для LocalIntranet
- настройка {SERVER_SPN} должна быть корректно произведена
Во время запроса на сервере формируется в логе Request Authorization:
- Negotiate YIIV… — правильно
- Negotiate TlRMT… — неправильно (попытка использовать NTLM)
Если по нажатию на ссылке Сквозная аутентификация (kerberos) будет выведено окно с вводом логина/пароля — то это значит что браузер не получил сервисный тикет в контроллере домена или даже не пытался это сделать. При возникновении такой ситуации самым действенным оказывается использование WireShark для прослушивания траффика по порту 88 с контроллером домена.
Настройка оповещателя
На сервере должна быть корректно настроена аутентификация.
Настройка для получения заданий
Настроить kerberos.properties если authentication.type установлено в kerberos (для sspiKerberos это не требуется):
appName=com.sun.security.jgss.initiate moduleClassName=com.sun.security.auth.module.Krb5LoginModule useTicketCache=true doNotPrompt=true debug=true serverPrincipal=HTTP/runaserver.test.com
Настройка для браузера
Настройку login.relative.url установить в /krblogin.do.
Типичные проблемы
Устаревшее руководство по настройке аутентификации Kerberos больше подходит для Windows2003
ошибка
описание
что делать
Client not found in Kerberos database (6)
SPN не зарегистрирован как пользователь (UserPrincipalName) либо продублирован (setspn -x)
Зарегистрировать SPN либо удалить дубликат
Pre-authentication information was invalid (24)
Неправильный пароль либо несовпадение информации по логину (UserPrincipalName изменён?).
Обратите внимание на атрибут salt в пакете KRB Error: KRB5KDC_ERR_PREAUTH_FAILED, он должен совпадать с principal, для которого вы получаете тикет; если не совпадает — то в БД kerberos что-то не так, попробуйте вновь воспользоваться командой ktpass
Сменить пароль (у пользователя и при формировании keytab)
Message stream modified (41)
Некорректно задано имя
Задать имя корректно — как оно задано на контроллере домена с учётом регистра
Clients credentials have been revoked (18)
Пользователь заблокирован
В настройках пользователя снять галочку Account is disabled
HTTP 400 при попытке обработки тикета YIIV…
Увеличить разрешённый максимум в Jboss с помощью настройки org.apache.coyote.http11.Http11Protocol.MAX_HEADER_SIZE в standalone.xml
No valid credentials provided (Mechanism level: Attempt to obtain new ACCEPT credentials failed!)
Настройка appName=com.sun.security.jgss.accept является устаревшей — для старых версий JDK
Изменить на com.sun.security.jgss.krb5.accept в kerberos.properties
Encryption type AES256 CTS mode with HMAC SHA1-96 is not supported/enabled
Нет поддержки типа шифрования AES-256 в JDK
Включение аудита на контроллере домена иногда помогает понять проблему (логирование происходит в журнале событий, категория Безопасность.
Устранение ошибки дублирования SPN
Вообще это нормальное поведение, что служба каталогов Active Directory производит проверку одинаковых SPN, но возможность отключения такого поведения все же есть. Первое, что вы должны сделать, это зайти на любой из контроллеров домена, которые отвечают за домен, где располагается сервер у которого есть дубль SPN. Откройте оснастку просмотр событий или же можете воспользоваться утилитой Windows Admin Center, это не принципиально. Найдите там журнал «ActiveDirectory_DomainService». В этом журнале поищите событие с кодом ID 2974.
The attribute value provided is not unique in the forest or partition. Attribute: servicePrincipalName Value=MSSQLSvc/SVTA.Pyatilistnik.org CN=СИНИНТ,OU=Technical,DC=root,DC=Pyatilistnik,DC=org Winerror: 8647
Так же найти все SPN для нужного объекта можно через команду:
dsquery * -filter servicePrincipalName=* | findstr имя объекта
Из ошибки ID 2974, мы видим, где именно уже прописан наш SPN, это учетная запись пользователя СИНИНТ. Давайте зайдем в ее свойства и удалим их.
Далее попробуем заново зарегистрировать SPN записи:
setspn.exe -a MSSQLSvc/SVT.Pyatilistnik.org PYATILISTNIK\run-t setspn.exe -a MSSQLSvc/SVT.Pyatilistnik.org:1433 PYATILISTNIK\run-t
Теперь все прошло штатно и без проблем «Регистрация ServicePrincipalNames» выполнена и объект добавлен.
На этом у меня все, с вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.