如何检查我的 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==....   

“这告诉我们什么?我们可以看到授权标头设置为“协商”,并且我们可以看到该标头中发送的一长串字符。此响应告诉我们客户端和服务器正在协商 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
}

答案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,而 GSSAPI 又可以使用各种机制;在 Windows 上,这包括 Kerberos 和 NTLM。

Wireshark 可以解码所有这些信息并快速向您展示发生了什么(假设您没有使用 TLS)。如果您使用的是 TLS,您可以安排 Wireshark 解密 TLS 流量;这需要一些额外的努力。

相关内容