Windows server kerberos error

Содержание
  1. Kerberos Service Principal Name on Wrong Account
  2. Symptoms
  3. Cause
  4. Resolution
  5. More information
  6. Устранение сбоев Kerberos в Internet Explorer
  7. Распространенный симптом при сбое Kerberos
  8. Определите, используется ли Kerberos
  9. Проверка сбоя проверки подлинности Kerberos
  10. Клиент и сервер в одном домене
  11. Настроен ли IIS для использования интегрированной проверки подлинности
  12. Включена ли интегрированная проверка подлинности в Internet Explorer
  13. Используется ли URL-адрес, используемый для разрешения в зону безопасности, для которой можно отправить учетные данные
  14. Настроен ли сервер IIS для отправки www-authenticate: заготавка переговоров
  15. Установлен ли клиент и сервер на одном компьютере
  16. Может ли клиент получить билет Kerberos
  17. Использует ли веб-сервер порт по умолчанию (80)
  18. Использует ли Internet Explorer ожидаемый SPN
  19. Соответствует ли удостоверение пула приложений учетной записи, связанной с SPN
  20. Не удается ли проверка подлинности Kerberos в версиях IIS 7 и более поздних версий, даже если она работает в IIS 6
  21. Почему не удается делегирование, хотя проверка подлинности Kerberos работает
  22. Почему я получаю плохую производительность при использовании проверки подлинности Kerberos
  23. Почему не удается делегирования Kerberos между двумя лесами, хотя раньше он работал
  24. Клавиши функций Internet Explorer

Kerberos Service Principal Name on Wrong Account

This article provides help to solve an issue where users fail to access a resource and a System event log shows Kerberos event 4.

Original product version: В Windows Server 2008 R2 Service Pack 1
Original KB number: В 2706695

Symptoms

A System event log has shown at least one Kerberos event 4. This an event on a server indicating that a client has given the server a ticket for access to a resource that the server can’t decrypt.

The true symptom is that a user failed to get access to a resource. The most likely error they received was an access denied or error 5.

Cause

Kerberos service tickets are obtained by a client and passed to a server to gain access to resources on that server. They’re signed using a secret which only that server that has the resource being requested can decrypt. When the SPN is on the wrong account in Active Directory the secret that is used is the one of the accounts the SPN is on instead of the one of the servers.

As a result, the server can’t decrypt the ticket and gives back an error to the client.

Resolution

To resolve this issue, the service principal name must be searched for and removed from the alternative account, and then it must be added to the correct account in Active Directory. To do that, follow these steps:

  1. At an elevated command prompt and using Enterprise Administrator credentials, run the command setspn -Q . This will return a computer name. SetSPN.exe is installed with the Active Directory Directory Services role or with RSAT.
  2. Remove the incorrectly registered SPN by going to the command prompt and running the command setspn -D .
  3. Add the SPN to the correct account at the command prompt by running the command setspn -A .

More information

When a client requests a service ticket that it can pass along the DC issues it. The client then sends it to the remote host it’s trying to authenticate to.

This problem may appear in a network trace with an error response from the resource server showing the error KRB_AP_ERR_MODIFIED .

In this scenario, the remote server can’t decrypt the ticket the client sent to it since the password used to encrypt it isn’t the right one. That, in turn, is the result of the SPN for that service and ticket being on the incorrect object in AD. It is that other objects password that is used instead. In this scenario, the server who can’t decrypt the ticket responds to the client. The client then puts Kerberos event 4 (example below) in its System event log. Less commonly this is caused by network problems between client and server where the ticket is truncated.

Устранение сбоев Kerberos в Internet Explorer

Эта статья помогает изолировать и устранить причины различных ошибок при доступе к веб-сайтам, настроенным для использования проверки подлинности Kerberos в Internet Explorer. Количество потенциальных проблем почти такое же большое, как и количество доступных средств для их решения.

Распространенный симптом при сбое Kerberos

Вы пытаетесь получить доступ к веб-сайту, на котором была настроена проверка подлинности Windows, и ожидается использование протокола проверки подлинности Kerberos. В этой ситуации браузер немедленно запросит учетные данные:

Хотя вы вводите допустимые имя пользователя и пароль, вам снова будет предложено (всего три запроса). Затем показан экран, на который указывается, что доступ к нужному ресурсу запрещен. На экране отображается код состояния HTTP 401, похожий на следующую ошибку:

Читайте также:  Linux нет команды reboot

На сервере Microsoft IIS (IIS) журналы веб-сайтов содержат запросы, которые заканчиваются кодом состояния 401.2, например следующим журналом:

Или на экране отображается код состояния 401.1, например следующий журнал:

Определите, используется ли Kerberos

При устранении неполадок с проверкой подлинности Kerberos рекомендуется упростить настройку до минимума. То есть один клиент, один сервер и один сайт IIS, работающий в порту по умолчанию. Кроме того, можно выполнять некоторые основные действия по устранению неполадок. Например, используйте тестовую страницу для проверки используемого метода проверки подлинности. Если вы используете ASP.NET, вы можете создать ASP.NET тестовую страницу проверки подлинности.

Если вы используете классический ASP, вы можете использовать следующую страницу Testkerb.asp:

Вы также можете использовать следующие средства, чтобы определить, используется ли Kerberos:

  • Fiddler
  • HttpWatch
  • Сетевой монитор
  • Средства разработчика в браузере

Дополнительные сведения о том, как можно сгенерить такие следы, см. в статью отслеживание на стороне клиента.

Когда используется Kerberos, запрос, отправленный клиентом, является большим (более 2000 битов), так как загон включает билет HTTP_AUTHORIZATION Kerberos. Ниже приводится запрос на страницу, на которую используется проверка подлинности Windows на основе Kerberos для проверки подлинности входящих пользователей. Размер запроса GET составляет более 4000 bytes.

Если используется рукопожатие NTLM, запрос будет значительно меньше. В следующем захвате клиента показан запрос на проверку подлинности NTLM. Запрос GET гораздо меньше (менее 1400 bytes).

После определения сбоя проверки подлинности Kerberos проверьте каждый из следующих элементов в заданного порядке.

Проверка сбоя проверки подлинности Kerberos

В следующих разделах описываются вещи, которые можно использовать для проверки сбоя проверки подлинности Kerberos.

Клиент и сервер в одном домене

Использование Kerberos требует домена, так как билет Kerberos доставляется контроллером домена (DC). Кроме того, возможны дополнительные сценарии, в которых:

  • Клиент и сервер не в одном домене, а в двух доменах одного леса.
  • Клиент и сервер находятся в двух разных лесах.

Эти возможные сценарии обсуждаются в разделе Почему не удается делегирования Kerberos между двумя моими лесами, хотя он использовался для работы в разделе этой статьи.

Настроен ли IIS для использования интегрированной проверки подлинности

Включена ли интегрированная проверка подлинности в Internet Explorer

Используется ли URL-адрес, используемый для разрешения в зону безопасности, для которой можно отправить учетные данные

Всегда запустите эту проверку для следующих сайтов:

  • Сайты, совпадают с локальной зоной интрасети браузера.
  • Сайты в зоне доверенных сайтов.

Вы можете проверить, в какой зоне браузер решает включить сайт. Для этого откройте меню File internet Explorer и выберите Свойства. В окне Properties будет отображаться зона, в которой браузер решил включить веб-сайт, на который вы просматриваете.

Вы можете проверить, позволяет ли зона, в которую включен сайт, автоматический логотип. Для этого откройте меню internet options internet Explorer и выберите вкладку Security. После выбора нужной зоны выберите кнопку Настраиваемый уровень для отображения параметров и убедитесь, что выбран автоматический логотип. (Как правило, эта функция включена по умолчанию для зон Интрасети и доверенных сайтов).

Даже при такой конфигурации не часто (так как для клиента требуется доступ к DC), Kerberos можно использовать для URL-адреса в интернет-зоне. В этом случае, если параметры по умолчанию не будут изменены, браузер всегда будет подсказок пользователю для учетных данных. Делегация Kerberos не будет работать в зоне Интернета. Это потому, что Internet Explorer позволяет делегирования Kerberos только для URL-адресов в зонах Интрасети и Доверенные сайты.

Настроен ли сервер IIS для отправки www-authenticate: заготавка переговоров

Если IIS не отправляет этот заголовок, используйте консоль IIS Manager для настройки заголовка Negotiate через свойство конфигурации NTAuthenticationProviders. Дополнительные сведения см. в рублях «Поставщики проверки подлинности Windows».

Вы можете получить доступ к консоли с помощью параметра Поставщики данных проверки подлинности Windows в диспетчере IIS.

По умолчанию свойство NTAuthenticationProviders не установлено. Это приводит к отправке iiS как заглавных Windows NT, так и lan-менеджеров (NTLM).

Установлен ли клиент и сервер на одном компьютере

По умолчанию Kerberos не включен в этой конфигурации. Чтобы изменить это поведение, необходимо установить ключ DisableLoopBackCheck реестра. Дополнительные сведения см. в kB 926642.

Может ли клиент получить билет Kerberos

Вы можете использовать средство Kerberos List (KLIST), чтобы убедиться, что клиентский компьютер может получить билет Kerberos для данного имени основного имени службы. В этом примере основное имя службы (SPN) — http/web-server.

KLIST — это родной инструмент Windows с Windows Server 2008 для серверных операционных систем и Windows 7 Пакет обновления 1 для клиентских операционных систем.

При сбое запроса на билет Kerberos проверка подлинности Kerberos не используется. Может произойти откат NTLM, так как запрашиваемая SPN неизвестна dc. Если dc недостижим, не происходит откат NTLM.

Чтобы объявить SPN, см. следующую статью:

Использует ли веб-сервер порт по умолчанию (80)

По умолчанию Internet Explorer не включает сведения о номере порта в SPN, который используется для запроса билета Kerberos. Это может быть проблемой, если вы используете IIS для пользования несколькими сайтами в разных портах и удостоверениях. В этой конфигурации проверка подлинности Kerberos может работать только для определенных сайтов, даже если все spNs были правильно объявлены в Active Directory. Чтобы устранить эту проблему, необходимо установить FEATURE_INCLUDE_PORT_IN_SPN_KB908209 значение реестра. (Сведения о том, как объявить ключ, см. в разделе Ключи функций Internet Explorer.) Этот параметр заставляет Internet Explorer включить номер порта в SPN, который используется для запроса билета Kerberos.

Читайте также:  Javascript redirect windows location

Использует ли Internet Explorer ожидаемый SPN

Если к веб-сайту можно получить доступ с помощью псевдонима (CNAME), internet Explorer сначала использует DNS-разрешение для разрешения имени псевдонима на имя компьютера (ANAME). Затем имя компьютера используется для создания SPN и запроса билета Kerberos. Даже если URL-адрес, который вошел в адресной панели Internet Explorer, internet Explorer запрашивает http://MYWEBSITE SPN для HTTP/MYSERVER, если MYWEBSITE является псевдонимом (CNAME) MYSERVER (ANAME). Это поведение можно изменить с помощью FEATURE_USE_CNAME_FOR_SPN_KB911149 ключа реестра. (См. ключи функции Internet Explorer для получения сведений о том, как объявить ключ.)

Трассировка сетевого монитора — это хороший метод проверки SPN, связанного с билетом Kerberos, как в следующем примере:

Соответствует ли удостоверение пула приложений учетной записи, связанной с SPN

Когда билет Kerberos отправляется из Internet Explorer на сервер IIS, он шифруется с помощью закрытого ключа. Закрытый ключ — это хаш пароля, используемого для учетной записи пользователя, связанной с SPN. Таким образом, расшифровать билет может только приложение, которое работает под этой учетной записью.

Ниже приводится сводка алгоритма проверки подлинности Kerberos:

Internet Explorer определяет SPN с помощью URL-адреса, вступив в адресную планку.

SpN передается через API API поставщика службы поддержки безопасности (SSPI) (InitializeSecurityContext) в системный компонент, отвечающий за безопасность Windows (процесс службы подсистемы локального органа безопасности (LSASS). На данном этапе можно увидеть, что код Internet Explorer не реализует код для построения билета Kerberos. Internet Explorer вызывает только API SSPI.

LSASS использует СНО, переданный для запроса билета Kerberos в DC. Если dc может обслуживать запрос (известный SPN), он создает билет Kerberos. Затем он шифрует билет с помощью ключа, построенного из хаши пароля учетной записи пользователя для учетной записи, связанной с SPN. Затем LSASS отправляет билет клиенту. Что касается Internet Explorer, то билет является непрозрачной blob.

Internet Explorer инкапсулирует билет Kerberos, предоставленный LSASS в загонке, а затем отправляет его на Authorization: Negotiate сервер IIS.

IIS обрабатывает запрос и передает его в правильный пул приложений с помощью указанного загона хоста.

Пул приложений пытается расшифровать билет с помощью API SSPI/LSASS и следуя следующим условиям:

Если билет можно расшифровать, проверка подлинности Kerberos будет успешной. Доступны все службы, связанные с билетом (вымысление, делегирование, если позволяет билет и так далее).

Если расшифровать билет нельзя, возвращается ошибка Kerberos (KRB_AP_ERR_MODIFIED). Эта ошибка является общей ошибкой, которая указывает, что билет был изменен каким-либо образом во время его транспортировки. Так что расшифровать билет не получается. Эта ошибка также регистрируется в журналах событий Windows.

Если вы явно не объявляете SPN, проверка подлинности Kerberos работает только в соответствии с одним из следующих удостоверений пула приложений:

  • Сетевая служба
  • ApplicationPoolIdentity
  • Другая учетная запись системы, например LOCALSYSTEM или LOCALSERVICE

Но эти удостоверения не рекомендуется, так как они являются угрозой безопасности. В этом случае билет Kerberos создается с помощью spN по умолчанию, созданного в Active Directory при добавлении в домен компьютера (в этом случае запущенного сервера IIS). Этот SPN по умолчанию связан с учетной записью компьютера. В соответствии с IIS учетная запись компьютера сопопосается с сетевой службой или объектом ApplicationPoolIdentity.

Если в пуле приложений необходимо использовать удостоверение, помимо перечисленных удостоверений, объявите SPN (с помощью SETSPN). Затем связать его с учетной записью, используемой для удостоверения пула приложений. Обычной ошибкой является создание аналогичных СНО, которые имеют различные учетные записи. Например:

  • SETSPN http/mywebsite UserAppPool1
  • SETSPN http/mywebsite UserAppPool2

Эта конфигурация не сработает, так как нет детерминистского способа узнать, будет ли зашифрован билет Kerberos для SPN http/mywebsite с помощью пароля UserAppPool1 или UserAppPool2. Эта конфигурация обычно создает KRB_AP_ERR_MODIFIED ошибок. Чтобы определить, есть ли вы в этом плохом сценарии повторяемой СНО, используйте средства, задокументированные в следующей статье:

Начиная с Windows Server 2008, вы также можете использовать обновленную версию SETSPN для Windows, которая позволяет обнаруживать дублирующиеся spNs с помощью команды при объявлении нового SPN для целевой учетной setspn –X записи. Дополнительные сведения см. в setspn.

Кроме того, рекомендуется просмотреть следующие статьи:

Не удается ли проверка подлинности Kerberos в версиях IIS 7 и более поздних версий, даже если она работает в IIS 6

Проверка подлинности режима ядра — это функция, представленная в IIS 7. Он предоставляет следующие преимущества:

  • Производительность увеличивается, так как переходы от режима ядра к пользователю больше не сделаны.
  • Расшифровка билетов Kerberos выполнена с помощью учетной записи машины, а не удостоверения пула приложений. Это изменение позволяет иметь несколько пулов приложений, работающих под разными удостоверениями без объявления SPNs.
Читайте также:  Как сделать сетевой принтер через роутер windows 10

Если spN объявлен для определенной учетной записи пользователя (также используемой в качестве удостоверения пула приложений), проверка подлинности режима ядра не может расшифровать билет Kerberos, так как она использует учетную запись машины. Эта проблема типична для сценариев веб-фермы. В этом сценарии обычно объявляется spN для (виртуального) имени хост-имени NLB. Чтобы предотвратить эту проблему, используйте один из следующих методов:

  • Отключить проверку подлинности режима ядра. (Не рекомендуется с точки зрения производительности.)
  • Установите использование UseAppPoolCredentials доtrue. При этом сохраняется преимущество производительности проверки подлинности режима ядра, позволяя расшифровку билета Kerberos в удостоверении пула приложений. Дополнительные сведения см. в рубрике New in IIS 7 — Проверка подлинности в режиме ядра.

Почему не удается делегирование, хотя проверка подлинности Kerberos работает

В этом сценарии проверьте следующие элементы:

Зона Internet Explorer, используемая для URL-адреса. Делегирования Kerberos разрешено только для зон Интрасети и доверенных сайтов. (Другими словами, Internet Explorer задает флаг при вызове ISC_REQ_DELEGATE InitializeSecurityContext только в том случае, если определяемая зона — это интрасеть или доверенные сайты.)

Учетная запись пользователя пула приложений IIS, на который размещен ваш сайт, должна иметь флажок Доверенный для делегирования в Active Directory.

В случае сбоя делегирования рассмотрите возможность использования диспетчера конфигурации Kerberos для IIS. Этот инструмент позволяет диагностировать и исправлять конфигурации IIS для проверки подлинности Kerberos и связанных СНО в целевых учетных записях. Дополнительные сведения см. в README.md. Вы можете скачать средство отсюда.

Почему я получаю плохую производительность при использовании проверки подлинности Kerberos

Kerberos — это протокол проверки подлинности на основе запросов в старых версиях Windows Server, таких как Windows Server 2008 SP2 и Windows Server 2008 R2. Это означает, что клиент должен отправить билет Kerberos (который может быть довольно большой blob) с каждым запросом, который сделан на сервер. Это противоречит методам проверки подлинности, которые используют NTLM. По умолчанию NTLM основан на сеансах. Это означает, что браузер будет проверить подлинность только одного запроса, когда откроет подключение TCP к серверу. Каждый последующий запрос на одно и то же подключение TCP больше не требует проверки подлинности для того, чтобы запрос был принят. В более новых версиях IIS, начиная с Windows 2012 R2 и далее, Kerberos также основан на сеансах. Только первый запрос на новое подключение TCP должен быть аутентификацией на сервере. Последующие запросы не должны включать билет Kerberos.

Это поведение можно изменить с помощью свойства authPersistNonNTLM, если вы работаете в версиях IIS 7 и более поздних версий. Если свойство настроено на верное, Kerberos станет сеансом на основе. В противном случае он будет основан на запросе. Это будет иметь более плохую производительность, так как каждый раз необходимо включать больший объем данных для отправки на сервер. Дополнительные сведения см. в рублях Запрос на основе сеанса проверки подлинности Kerberos (или параметр AuthPersistNonNTLM).

Возможно, не стоит слепо использовать проверку подлинности Kerberos на всех объектах. Использование проверки подлинности Kerberos для получения сотен изображений с помощью условных запросов GET, которые, скорее всего, создают 304 не измененных ответа, похоже на попытку убить муху с помощью молотка. Такой метод также не обеспечит очевидных преимуществ безопасности.

Почему не удается делегирования Kerberos между двумя лесами, хотя раньше он работал

Рассмотрим следующий сценарий.

  • Пользователи приложения находятся в домене в лесу А.
  • Ваше приложение расположено в домене в лесу B.
  • Между лесами есть доверительные отношения.

В этом сценарии делегирования Kerberos может перестать работать, даже если раньше она работала, и вы не вносили изменений ни в леса, ни в домены. Проверка подлинности Kerberos по-прежнему работает в этом сценарии. Не удается только делегирования.

Эта проблема может возникнуть из-за обновлений безопасности Windows Server, выпущенных Корпорацией Майкрософт в марте 2019 г. и июле 2019 г. Эти обновления отключили неподготовленную делегирование Kerberos (возможность делегирования маркера Kerberos из приложения в службу back-end) через границы леса для всех новых и существующих трастов. Дополнительные сведения см. в статью Updates to TGT delegation across incoming trusts in Windows Server.

Клавиши функций Internet Explorer

Эти клавиши являются ключами реестра, которые включат или выключают некоторые функции браузера. Ключи расположены в следующих расположениях реестра:

  • HKEY_USERS\ \Software\Microsoft\Internet Explorer\Main\FeatureControl — если определено на уровне пользователя
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\ — если определено на уровне машины

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

  • для всех пользователей на компьютере
  • только для определенной учетной записи
Оцените статью