如何檢查我的 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 驗證方法「NTLM」;另一種是透過談判。 Negotiate 使用 GSSAPI,GSSAPI 又可以使用各種機制;在 Windows 上,這包括 Kerberos 和 NTLM。

Wireshark 可以解碼所有這些內容並快速向您顯示正在發生的情況(假設您沒有使用 TLS)。如果是,您可以安排 Wireshark 能夠解密 TLS 流量;只是需要一些額外的努力。

相關內容