Развертывание одного и того же HTTP-приложения на нескольких веб-серверах (srv1
, srv2
и т. Д.). Защита приложения с помощью SPNEGO auth. Серверы Linux и AD не знают об их существовании, т. Е. Не присоединяются к домену. У меня все SPNEGO работает плавно на одном хосте. Теперь перейдем к последующим хостам.Kerberos/SPNEGO: несколько SPN для той же учетной записи AD
Большинство руководств, которые я нашел скажу вам, что вам нужно
- счет в AD
- SPN
- A Keytab (генерируемый на сервере AD, а затем перешел к хосту Linux)
Хотя я считаю, что (2) + (3) всегда должен быть на сервере, я несколько не уверен в (1). Можно ли использовать только одну учетную запись? Я бы очень хотел, чтобы у меня не было всех этих учетных записей в AD, если я могу сделать только с одним.
This blog имеет хороший рецепт для того, как это можно сделать: первый вызов ktpass
(для srv1
) должно быть, как описано в всех руководствах вы найдете в Интернете, однако последующие вызовы (для srv2
, srv3
и т.д.) следует использовать параметры -setpass и -setupn.
Однако я обнаружил, что при использовании инструмента ktpass.exe
атрибут учетной записи userPrincipalName
изменяется так, как указано аргументом princ от последнего вызова ktpass
. Таким образом, имя srv, например. srv3
закодирован в имя, и поэтому имя учетной записи будет в основном изменяться с каждым вызовом ktpass. Когда веб-сервер выполняет последний этап в цепочке событий SPNEGO, который должен связаться с AD с помощью keytab в качестве учетных данных, он будет искать учетную запись в AD с userPrincipalName
, равным SPN, и поэтому этот шаг завершится с ошибкой. (source, перейти к последнему сообщению, item item 3). Противоречие в том, что я использую Tomcat и тем самым JAAS, и насколько я понимаю, я могу hardcode the principal name to use in my jaas.conf
file, тем самым эффективно игнорируя главное имя из keytab.
Может ли работать несколько серверов приложений с одной учетной записью в AD, и если да, то как?
Не уверен в ваших рассуждениях - конфигурационный файл JAAS определяет, какой именно директор (явно) и какие «хэшированные пароли» (из файла keytab) ваша система представит KDC. В вашем случае KDC - это Active Directory, а AD не ** ** использует принципала в качестве идентификатора учетной записи. Это точка команды setpn: определение сопоставления 1..N между идентификатором учетной записи и (списком) SPN. Я думаю, что поле LDAP 'userPrincipalName' является лишь верхушкой айсберга ... и AD использует что-то еще для разрешения принципала против фактического идентификатора. –
Да, возможно, моя проблема в том, что я не совсем понимаю, что происходит на этом заключительном этапе между Tomcat и AD. – peterh
Это то, что происходит * внутри * AD, что имеет значение. Tomcat просто подключается к порту 88 и выполняет обычные вещи Kerberos, как если бы это была служба MIT Kerberos, а не существо Microsoft. –