Как я могу проверить, использует ли мой сайт IIS NTLM или Kerberos? И как мне изменить аутентификацию с Kerberos на NTLM? Я использую IIS 7.5.
Из:
Определите, является ли проверка подлинности HTTP NTLM или Kerberos
http://support.microsoft.com/kb/891032
[...] «Поскольку мы просматриваем эту трассировку, чтобы увидеть, отправляет ли клиент информацию аутентификации, мы можем использовать сегменты TCP для отслеживания запросов HTTP GET и ответа от сервера. Вот фрагмент из кадра, который отправляет аутентификационную информацию от клиента:
23 4294967263.4294641621 LOCAL 00045A420DBC HTTP-запрос GET (от клиента, использующего порт 3135) 192.168.0.2 192.168.0.4 IP HTTP: GET-запрос (от клиента, использующего порт 3135) HTTP: метод запроса = GET HTTP: унифицированный идентификатор ресурса = /webapplication1/webform1.aspx HTTP: Версия протокола = HTTP / 1.1 HTTP: Accept = image / gif, image / x-xbitmap, image / jpeg, image / pjpeg, application / vnd. HTTP: Accept-Language = en-us HTTP: Accept-Encoding = gzip, deflate HTTP: User-Agent = Mozilla / 4.0 (совместимый; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR HTTP: Host = alien HTTP: Connection = Keep-Alive HTTP: Авторизация = Согласовать TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAFASgKAAAA 44 77 3D 3D 0D 0A 0D 0A AAADw == ....
«О чем это нам говорит? Мы видим, что заголовок авторизации установлен на« Согласование », и мы видим длинную строку символов, отправленную в этом заголовке. Этот ответ сообщает нам, что клиент и сервер согласовывают соединение NTLM. Мы знаем, что здесь используется проверка подлинности NTLM, потому что первый символ - это буква "T." Если бы это было «Y», это было бы Kerberos. Заголовок установлен на «Согласование» вместо «NTLM». Это не означает, что он будет использовать Kerberos или NTLM, но что он будет «согласовывать» метод авторизации и сначала пробовать Kerberos, если это возможно. Если он не может использовать Kerberos, он будет использовать NTLM ».
// if it is Negotiate...
if (String.Compare(Request.ServerVariables["HTTP_AUTHORIZATION"].Substring(10, 1), "Y", true) == 0)
{
// we are using Kerberos
}
else
{
// we are using NTLM
}
Если у вас есть доступ к вашему серверу IIS, ответ будет намного проще, чем проверка HTTP-трафика: просто просмотрите конфигурацию модуля аутентификации сайта для аутентификации Windows.
используйте приведенный ниже код на странице html / asp:
<%
authType=UCase(Request.ServerVariables("AUTH_TYPE"))
authHeader=Request.ServerVariables("HTTP_AUTHORIZATION")
response.write " Authentication Method : " & authType & "<BR>"
LenAuthHeader = len(authHeader)
response.write " Protocol : "
if Len(authType ) =0 then response.write " Anonymous" else if authType<>"NEGOTIATE" then response.write authType else if LenAuthHeader>1000 then response.write "Kerberos" else response.write "NTLM"
%>
В заголовке HTTP-запроса (вы можете увидеть его из Firebug, Хром Инструмент разработчика или Скрипач) вы увидите что-то подобное, если используете NTLM
Авторизация: NTLM = TlRMTVNTGD6XAAAAGAAYAG425qAAYABgAhgAAAAAAAABIAAAADgAOAEgAAAAYABgAVgAAAAAAAACeAAAABYKIogUBKAoAAAAPcwBpAG0AcABsAGkAcABOADMAUgBXAEsAVwBBAEwAVABFAFIAQQAzVtleqNj7HAAAAAAAAAAAAAAAAAAAAACW3g66aPaiileWScIYweBj6fs2iGY / TA3 =
Из панели управления IIS вы можете перейти «Аутентификация» и выбрать предпочитаемую аутентификацию.
Этот ответ не совсем полный. NTLM может использоваться двумя способами. Один - через метод WWW-аутентификации "NTLM"; другой - через переговоры. Negotiate использует GSSAPI, который, в свою очередь, может использовать различные механизмы; в Windows это включает как Kerberos, так и NTLM.
Wireshark может расшифровать все это и быстро показать вам, что происходит, если вы не используете TLS. Если да, то вы можете сделать так, чтобы Wireshark мог расшифровать трафик TLS; это просто требует дополнительных усилий.