¿Cómo puedo comprobar si mi sitio IIS utiliza NTLM o Kerberos?

¿Cómo puedo comprobar si mi sitio IIS utiliza NTLM o Kerberos?

¿Cómo puedo comprobar si mi sitio IIS utiliza NTLM o Kerberos? ¿Y cómo puedo cambiar la autenticación de Kerberos a NTLM? Estoy usando IIS 7.5.

Respuesta1

De:

Determinar si la autenticación HTTP es NTLM o Kerberos
http://support.microsoft.com/kb/891032

[...] "Dado que estamos revisando este seguimiento para ver si el cliente está enviando información de autenticación, podemos usar los segmentos TCP para rastrear las solicitudes HTTP GET y la respuesta del servidor. Aquí hay un fragmento del marco que envía información de autenticación del cliente:

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==....   

"¿Qué nos dice esto? Podemos ver que el encabezado Autorización está configurado en "Negociar" y podemos ver una larga cadena de caracteres enviada en ese encabezado. Esta respuesta nos dice que el cliente y el servidor están negociando una conexión NTLM.Sabemos que aquí se utiliza la autenticación NTLM porque el primer carácter es una "T". Si fuera una "Y", sería Kerberos. El encabezado está configurado en "Negociar" en lugar de "NTLM". Esto no significa que utilizará Kerberos o NTLM, sino que "negociará" el método de autorización y probará Kerberos primero si puede. Si no puede utilizar Kerberos, utilizará 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
}

Respuesta2

Si tiene acceso a su servidor IIS, entonces la respuesta es mucho más simple que inspeccionar el tráfico HTTP: simplemente vea la configuración del módulo de autenticación del sitio para la autenticación de Windows.

  1. En el Administrador de IIS
  2. Seleccione su sitio
  3. Haga clic en el módulo de autenticación
  4. Seleccione Autenticación de Windows
  5. Seleccionar proveedores...

Administrador de IIS > Sitio > Módulo de autenticación > Proveedores

Respuesta3

use el siguiente código en la página 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"
%> 

Respuesta4

Esa respuesta no es del todo completa. Hay dos formas en que la conexión puede utilizar NTLM. Uno es a través del método WWW-Authenticate "NTLM"; el otro es vía Negociar. Negotiate utiliza GSSAPI, que a su vez puede utilizar varios mecanismos; en Windows, esto incluye tanto Kerberos como NTLM.

Wireshark puede decodificar todo esto y mostrarle rápidamente lo que está sucediendo, suponiendo que no esté usando TLS. Si es así, puede hacer arreglos para que Wireshark pueda descifrar el tráfico TLS; sólo requiere un esfuerzo extra.

información relacionada