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 接続をネゴシエートしていることを示しています。最初の文字が「T」なので、ここではNTLM認証が使用されていることがわかります。「Y」の場合はKerberosになります。ヘッダーは「NTLM」ではなく「Negotiate」に設定されています。これは、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 を使用する方法は 2 つあります。1 つは WWW 認証方法「NTLM」を使用する方法で、もう 1 つは Negotiate を使用する方法です。Negotiate は GSSAPI を使用しますが、GSSAPI はさまざまなメカニズムを使用できます。Windows では、Kerberos と NTLM の両方が含まれます。

Wireshark は、TLS を使用していないと仮定すると、これらすべてをデコードして、何が起こっているかをすぐに表示できます。TLS を使用している場合は、Wireshark が TLS トラフィックを復号化できるように設定できますが、少し余分な手間がかかります。

関連情報