Как я могу проверить, использует ли мой сайт IIS NTLM или Kerberos?
Как я могу проверить, использует ли мой сайт IIS NTLM или Kerberos? И как я могу изменить аутентификацию с Kerberos на NTLM? Я использую IIS 7.5.
6 ответов
От:
Определите, является ли 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, выкачать HTTP: User-Agent = Mozilla/4.0 (совместимо; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR HTTP: Host = чужой HTTP: соединение = Keep-Alive HTTP: авторизация = переговоры TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFASgKAAAA 44 77 3D 3D 0D 0A 0D 0A AAADw ==....
"Что это говорит нам? Мы видим, что заголовок Authorization установлен на"Negotiate", и мы можем видеть длинную строку символов, отправленных в этом заголовке. Этот ответ говорит нам, что клиент и сервер согласовывают соединение 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.
- В IIS Manager
- Выберите свой сайт
- Нажмите на модуль аутентификации
- Выберите проверку подлинности 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"
%>
Обнаружил, что у Microsoft есть действительно хорошая страница о Kerberos .
Вот описание множества ошибок при использовании Kerberos и согласования (например, на локальном хосте для согласования по умолчанию используется NTLM ).
Если вы использовали ядро dotnet, код сервера может выглядеть так (код из @pafreire предназначен для старого классического asp и также описан на странице ms).
private string GetAuthMethodeInfo()
{
var authType = this.HttpContext.GetServerVariable("AUTH_TYPE")?.ToUpper() ?? string.Empty;
var authHeader = this.HttpContext.GetServerVariable("HTTP_AUTHORIZATION");
var lenAuthHeader = authHeader?.Length;
var protocol = authType.Length == 0 ? "Anonymous" : authType != "NEGOTIATE" ? authType : lenAuthHeader > 1000 ? "Kerberos" : "NTLM";
return $"Authentication-Method : {authType} Protocol: {protocol}";
}
Этот ответ не является полным. Существует два способа подключения NTLM. Один из них - через WWW-метод аутентификации NTLM; другой - через переговоры. Переговоры используют GSSAPI, который в свою очередь может использовать различные механизмы; в Windows это включает в себя как Kerberos, так и NTLM.
Wireshark может декодировать все это и быстро показать вам, что происходит, при условии, что вы не используете TLS. Если да, вы можете организовать, чтобы Wireshark мог расшифровывать трафик TLS; это просто требует дополнительных усилий.
В вашем заголовке HTTP-запроса (вы можете увидеть его из Firebug, Chrome Dev Tool или Fiddler) вы увидите нечто подобное, если вы используете NTLM
Авторизация: NTLM=TlRMTVNTGD6XAAAAGAAYAG425qAAYABgAhgAAAAAAAABIAAAADgAOAEgAAAAYABgAVgAAAAAAAACeAAAABYKIogUBKAoAAAAPcwBpAG0AcABsAGkAcABOADMAUgBXAEsAVwBBAEwAVABFAFIAQQAzVtleqNj7HAAAAAAAAAAAAAAAAAAAAACW3g66aPaiileWScIYweBj6fs2iGY/ TA3=
Из панели управления IIS вы можете перейти к аутентификации и выбрать предпочитаемую аутентификацию.