
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
答え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 トラフィックを復号化できるように設定できますが、少し余分な手間がかかります。