web-dev-qa-db-ja.com

IISサイトがNTLMまたはKerberosを使用しているかどうかを確認するにはどうすればよいですか?

IISサイトがNTLMまたはKerberosを使用しているかどうかを確認するにはどうすればよいですか?また、認証をKerberosからNTLMに変更するにはどうすればよいですか?IIS 7.5。

10
KlimczakM

から:

HTTP認証がNTLMまたはKerberosであるかどうかを判別します
http://support.Microsoft.com/kb/891032

[...]「このトレースを調べて、クライアントが認証情報を送信しているかどうかを確認しているので、TCPセグメントを使用して、HTTP GET要求とサーバーからの応答を追跡できます。 。これは、クライアントから認証情報を送信するフレームのスニペットです。

23 4294967263.4294641621 LOCAL 00045A420DBC HTTP GETリクエスト(ポート3135を使用するクライアントから)192.168.0.2 192.168.0.4 IP HTTP:GETリクエスト(ポート3135を使用するクライアントから)HTTP:リクエストメソッド= GET HTTP:Uniform Resource Identifier = /webapplication1/webform1.aspx HTTP:プロトコルバージョン= 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 =キープアライブHTTP:承認= 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
}
8
Greg Askew

IISサーバーにアクセスできる場合、答えはHTTPトラフィックを検査するよりもはるかに簡単です:Windows認証のサイト認証モジュール構成を表示するだけです。

  1. IISマネージャ
  2. サイトを選択してください
  3. 認証モジュールをクリックします
  4. Windows認証を選択
  5. プロバイダーを選択...

IIS Manager > Site > Authentication module > Providers

3
JohnC

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"
%> 
1
pafreire

HTTPリクエストヘッダー(FirebugChrome 開発ツールまたはFiddler)NTLMを使用すると、次のようになります。

認証:NTLM = TlRMTVNTGD6XAAAAGAAYAG425qAAYABgAhgAAAAAAAABIAAAADgAOAEgAAAAYABgAVgAAAAAAAACeAAAABYKIogUBKAoAAAAPcwBpAG0AcABsAGkAcABOADMAUgBXAEsAVwBBAEwAVABFAFIAQQAzVtleqNj7HAAAAAAAAAAAAAAAAAAAAACW3g66aPaiileWScIYweBj6fs2iGY/TA3 =

IIS管理パネルから、認証に進み、希望する認証を選択できます。

0
Burnzy

その答えは完全ではありません。接続でNTLMを使用する方法は2つあります。 1つはWWW-Authenticateメソッド「NTLM」を使用する方法です。もう1つはネゴシエート経由です。 NegotiateはGSSAPIを使用しており、GSSAPIはさまざまなメカニズムを使用できます。 Windowsでは、これにはKerberosとNTLMの両方が含まれます。

Wiresharkはこれらすべてをデコードし、TLSを使用していない場合、何が起こっているのかをすばやく示します。そうであれば、WiresharkがTLSトラフィックを復号化できるように手配できます。少し手間がかかります。