Как проверить, использует ли мой сайт IIS NTLM или Kerberos?

Как проверить, использует ли мой сайт IIS NTLM или Kerberos?

Как проверить, использует ли мой сайт IIS NTLM или Kerberos? И как изменить аутентификацию с Kerberos на NTLM? Я использую IIS 7.5.

решение1

От:

Определите, используется ли HTTP-аутентификация NTLM или Kerberos
http://support.microsoft.com/kb/891032

[...] «Поскольку мы просматриваем эту трассировку, чтобы узнать, отправляет ли клиент информацию об аутентификации, мы можем использовать сегменты TCP для отслеживания запросов HTTP GET и ответа от сервера. Вот фрагмент из кадра, который отправляет информацию об аутентификации от клиента:

23 4294967263.4294641621 LOCAL 00045A420DBC HTTP GET Request (from client using port 3135) 192.168.0.2 192.168.0.4 IP 
HTTP: GET Request (from client using port 3135)
  HTTP: Request Method = GET
  HTTP: Uniform Resource Identifier = /webapplication1/webform1.aspx
  HTTP: Protocol Version = 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 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 
  HTTP: Host = alien
  HTTP: Connection = Keep-Alive
  HTTP: Authorization = Negotiate TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFASgKAAAA
44 77 3D 3D 0D 0A 0D 0A         AAADw==....   

«О чем это нам говорит? Мы видим, что заголовок Authorization установлен на «Negotiate», и мы видим длинную строку символов, отправленную в этом заголовке. Этот ответ говорит нам, что клиент и сервер согласовывают соединение NTLM.Мы знаем, что здесь используется аутентификация NTLM, поскольку первый символ — «T». Если бы это был «Y», это был бы Kerberos.. Заголовок установлен на "Negotiate" вместо "NTLM". Это не означает, что он будет использовать Kerberos или NTLM, но что он будет "Negotiate" метод авторизации и сначала попробует 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
}

решение2

Если у вас есть доступ к серверу IIS, то ответ гораздо проще, чем проверка HTTP-трафика: просто просмотрите конфигурацию модуля аутентификации сайта для аутентификации Windows.

  1. В диспетчере IIS
  2. Выберите свой сайт
  3. Нажмите на модуль аутентификации.
  4. Выберите проверку подлинности Windows.
  5. Выберите поставщиков...

Диспетчер IIS > Сайт > Модуль аутентификации > Поставщики

решение3

используйте код ниже на странице 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"
%> 

решение4

Этот ответ не совсем полный. Есть два способа, которыми соединение может использовать NTLM. Один — через метод WWW-Authenticate "NTLM"; другой — через Negotiate. Negotiate использует GSSAPI, который, в свою очередь, может использовать различные механизмы; в Windows это включает как Kerberos, так и NTLM.

Wireshark может расшифровать все это и быстро показать вам, что происходит, если вы не используете TLS. Если вы используете, вы можете сделать так, чтобы Wireshark мог расшифровать трафик TLS; это просто требует дополнительных усилий.

Связанный контент