Несколько аутентифицированных веб-серверов SPNEGO на одном имени хоста

Я пытался настроить службу Java, используя фильтр сервлета SPNEGO и порт прослушивания 8080 для аутентификации на хосте, на котором также выполняются веб-приложения, размещенные в IIS7.

Я следовал инструкциям по установке SPNEGO и создал SPN для HTTP/canonical.host.name, привязанный к пользователю, выполняющему аутентификацию для службы Java.

После этого изменения Java-сервис может аутентифицировать клиентов через SPNEGO, но пулы приложений IIS7, работающие с пользовательскими идентификаторами (т. Е. Имена пользователей вместо ApplicationPoolIdentity), неожиданно не могут аутентифицироваться.

Что я не понимаю здесь:

  • Как проверка подлинности Kerberos работает для IIS, когда нет имени участника-службы для HTTP/canonical.host.name определяется с помощью (как проверено с помощью setspn -Q)? Клиенты по-прежнему запрашивают и получают билеты именно на это имя участника-службы.
  • Из интереса мы попытались запустить пулы приложений с идентификатором службы Java, которая успешно проходит аутентификацию. Это все еще не работало, пока SPN был определен - попытки аутентификации с билетом Kerberos потерпели неудачу с KRB_AP_ERR_MODIFIED вернулся. Запуск пула приложений от имени пользователя, для которого зарегистрирован SPN, не изменил этого поведения.
  • Microsoft указывает имена участников-служб для включения номера порта, но IE не соответствует этому и никогда не отправляет номер порта в имени участника-службы (в этом случае следуют Firefox и Chrome).

Итак, есть ли способ иметь несколько независимых сервисов с аутентификацией SPNEGO на одном хосте?

2 ответа

Решение

Последнее сначала: для нескольких сервисов с аутентификацией SPNEGO на одном и том же хосте без использования ключей реестра IE используйте разные имена.

• Как работает аутентификация Kerberos для IIS, если для HTTP/canonical.host.name не определено имя участника-службы (определено с помощью setspn -Q)? Клиенты по-прежнему запрашивают и получают билеты именно на это имя участника-службы.

Это автоматический резерв на основе HOST\boxname SPN, который создается для всех компьютеров во время присоединения к домену - если контроллер домена не находит соответствия для SPECIFICSERVICE\boxname в соответствии с запросом клиентского приложения, он предоставит билет на основе HOST\boxname.

использование SETSPN -L boxname перечислить имена участников-служб, связанные с субъектом безопасности (учетная запись пользователя или компьютера).

• Из интереса мы попытались запустить пулы приложений с идентификатором службы Java, которая успешно аутентифицируется. Это все еще не работало, пока SPN был определен - попытки аутентификации с билетом Kerberos потерпели неудачу с возвращенным KRB_AP_ERR_MODIFIED. Запуск пула приложений от имени пользователя, для которого зарегистрирован SPN, не изменил этого поведения.

По умолчанию для IIS 7 используется useAppPoolCredentials=false и useKernelMode=true; один или оба из них должны быть переключены, чтобы идентификация пула приложений использовалась для декодирования билетов Kerberos.

• Microsoft указывает имена участников-служб для включения номера порта, но IE не соответствует этому и никогда не отправляет номер порта в имени участника-службы (в этом случае следуют Firefox и Chrome).

И вернемся к реальной сути вопроса: когда все остальное исправлено, IE и другие по-прежнему не будут включать номера портов по умолчанию, поэтому решение с наименьшей модификацией состоит в том, чтобы просто запускать разные заголовки хоста на одном и том же блоке.

Также обратите внимание, что из-за другого поведения IE (с тем же аргументом против изменения настроек реестра всех ваших клиентов) CNAME не являются хорошим выбором, вместо этого используйте записи A.

Больше здесь и здесь и в меньшей степени здесь.

Получили ли вы ключи reg из этой КБ http://support.microsoft.com/default.aspx?scid=kb;EN-US;908209 настроенные на клиенте? Иначе IE не будет запрашивать правильный билет. Просто для ясности, ключи reg поставляются с исправлением IE6+, но с тех пор применяются ко всем версиям IE.

Я не уверен, что понимаю вашу конфигурацию. Настроен ли SPN HTTP / canonical.host.name для учетной записи службы, используемой для "службы Java"?

Вы можете иметь несколько служб, работающих на коробке, используя разные идентификаторы. Таким образом, вы можете иметь службу HTTP/host1.host.name и HTTP/host2.host.name на одном хосте. Вы можете зарегистрировать имена участников-служб, участвующие в одной учетной записи службы или в других учетных записях службы, если вы того пожелаете.

Запросы для имени участника-службы HTTP сопоставляются объектам с именем участника-службы на основе HOST, если имя участника-службы HTTP нигде явно не задано. Это сопоставление происходит с помощью атрибута SPNMappings для объекта, который выглядит как CN= Служба каталогов,CN=Windows NT,CN= Службы, CN= Конфигурация,DC=forest1,DC=local (forest1.local здесь - имя леса) согласно http://msdn.microsoft.com/en-us/library/cc220898(v=PROT.13).aspx.

Блоги Тристана великолепны. Вы также можете найти блоги по устранению неполадок и другие блоги, связанные с Kerberos, по адресу http://blogs.technet.com/b/askds/archive/tags/kerberos/ полезными.

Другие вопросы по тегам