如何检查我的 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
答案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 流量;这需要一些额外的努力。