Kerberos и несколько SPN
Мне удалось настроить аутентификацию Kerberos для 1 сервера, и он работает нормально. Теперь у меня есть проект, в котором я должен добавить еще один сервер в конфигурацию Kerberos следующим образом:
1) AD сервер
2) server1, где работает сервис
3) server2, где будет работать тот же сервис
поэтому я выполнил команду setspn, чтобы назначить оба пользователя "spn":
setspn -s serviceX/server1.domain.com@DOMAIN.COM spn
setspn -s serviceX/server2.domain.com@DOMAIN.COM spn
Затем я выполнил коммандер ktpass:
ktpass -princ serviceX/server1.domain.com@DOMAIN.COM -ptype KRB5_NT_PRINCIPAL -crypto AES256-SHA1 -mapuser serviceX \ spn -out C: \ keytab + rndPass
Что мне делать дальше, чтобы это заработало? Как выполнить ktpass для server2? Когда я попробовал ту же команду для server2, я получаю предупреждение:
Предупреждение. Не удалось настроить UPN serviceX/server2.domain.com ptype 1 vno 10 etype 0x12 kinits на "serviceX/server2.domain.com".
Как вы, ребята, настраиваете аутентификацию Kerberos для одного и того же сервиса, но на разных серверах? Создаете ли вы 2 spn пользователей и 2 keytabs? Я думаю, что мне нужно иметь все в 1 keytab, так как сервис требует этого. Любая помощь?
1 ответ
Вы можете запустить serviceX на двух разных серверах, используя одну и ту же таблицу ключей, используя имя участника- службы, привязанное к учетной записи пользователя в каталоге, а не к каждому серверу. Для этого вы привязываете имя участника-службы к имени виртуального сервера ("VIP") вместо реального. Мы делаем это все время в моей нынешней организации. Таким образом, поскольку SPN будет использовать имя виртуального сервера в DNS, вы просто настраиваете балансировщик нагрузки для отправки любых запросов для этого виртуального имени на реальные серверы за ним, "отвечающие" на это имя. Так что в этом случае вместо того, чтобы беспокоиться об уникальных таблицах ключей для server1 и server2, просто создайте одну таблицу ключей для того, что я буду называть server-vip, а затем скопируйте эту же таблицу ключей на оба сервера. Если у вас нет балансировщика нагрузки, вы можете сделать это с помощью циклического перебора DNS. Таким образом, приведенный ниже пример будет вашим новым синтаксисом создания keytab, обратите внимание, как меняется только одна вещь. Еще одна причина, почему это хорошо, потому что он устойчив к изменениям на сервере. Когда вы в конечном итоге списываете серверы server1 и server2, вы можете легко скопировать таблицу ключей на server3 и server4, когда наступит этот день.
ktpass -princ serviceX / server-vip.domain.com @ DOMAIN.COM -ptype KRB5_NT_PRINCIPAL -crypto AES256-SHA1 -магазинный сервис X\spn -out C:\keytab +rndPass
Друг ...
когда вы пытаетесь привязать SPN:
serviceX/server-vip.domain.com@DOMAIN.COM
с UPN
spn
Ошибка: подключение к "serviceX/server2.domain.com" завершится ошибкой. указать на какую-то проблему, но не совсем где и как. Сегодня у меня была такая же проблема, но другой журнал выявил основную причину ошибки:
Не удалось установить свойство userPrincipalName
Когда мы пытаемся сгенерировать keytab с помощью ktpass, отображается это сообщение, чего мы не можем себе представить, так это то, что объект UPN имеет так много атрибутов, одним из них является UserPrincipalName. Так почему же мы не можем установить атрибут UserPrincipalName со значением spn? потому что он уже настроен в другом атрибуте UPN! К сожалению, вам нужно будет проверить все атрибуты вашего UPN, ища значение "spn".
вы можете использовать adsiedit для ручного поиска:
adsiedit.msc
или создайте цикл с пользователями, которые ищут атрибут userPrincipalName:
$users = get-aduser -filter *
foreach ($var in $users) { $var | select Name, UserprincipalName | fl }
Я решил проблему, обнаружив, что мой атрибут "UserPrincipalName" неправильно настроен в другом UPN.
► Для каждого UserPrincipalName необходимо указать одно и то же имя UPN.
UPN=s_user_http, затем UserPrincipalName=s_user_http@YOUR_DOMAIN, проверьте это!
отвечая на ваш вопрос: один UPN может быть кратным SPN, но это опасно, если вы случайно увеличите kvno, все остальные keytabs будут недействительными. Используйте одно имя участника-пользователя для каждого участника-службы.
Надеюсь, это поможет.