この記事では、仮想的なクライアントとサーバーの展開を使用して、Kerberos 認証に関する問題のトラブルシューティング方法を示します。
環境と構成
ユーザー "John" は、
contoso.com
ドメインに属しています。すべてのドメインのドメイン ネーム システム (DNS) サーバーはドメイン コントローラーです。
John は、次のように構成されたクライアント コンピューターにサインインします。
名前とドメイン:
Client1.contoso.com
オペレーティング システム: Windows 11
ブラウザー: Microsoft Edge
監視アプリケーション: ネットワーク モニター ( Microsoft Network Monitor からインストール)
インターネット オプションの構成: すべての
contoso.com
サイトがローカル イントラネット ゾーンに属している
クライアント コンピューターで、John は次のように構成されたターゲット サーバーに接続します。
名前とドメイン:
IISServer.contoso.com
オペレーティング システム: Windows Server 2019
ターゲット サービス: インターネット インフォメーション サービス (IIS) で実行される Web サイト
ターゲット サービス アカウント: コンピューター アカウント (サービスは
IISServer.contoso.com
のコンテキストで実行されます)ターゲット サービス ポート: TCP ポート 80
認証構成 (インターネット インフォメーション サービス マネージャーで構成):
Windows 認証 が 有効です。
次のスクリーンショットに示すように、有効な認証プロバイダーの一覧には Negotiate が含まれています。
ログオン監査の構成: ログオンの成功の監査とログオン失敗の監査の両方が有効になっています。
注
既定では、すべての Windows Server オペレーティング システムで成功と失敗のログオン監査が有効になっています。 この設定を確認するには、管理コマンド プロンプト ウィンドウを開き、次のコマンドを実行します。
auditpol /get /Subcategory:"logon"
この設定が有効になっている場合、このコマンドは次の出力を生成します。
System audit policy Category/Subcategory Setting Logon/Logoff Logon Success and Failure
この結果が表示されない場合は、次のコマンドを実行して、成功と失敗の監査ログを有効にします。
auditpol /set /subcategory:"Logon" /Success:enable /Failure:enable
想定される認証フロー
次の図は、Kerberos 要求メッセージと応答メッセージのシーケンスと、前のセクションで説明した環境内のそれらのメッセージのパスを示しています。
このプロセスは、クライアント コンピューター Client1.contoso.com
にサインインしているユーザー John が Microsoft Edge ブラウザーを開き、 IISServer.contoso.com
に接続すると開始されます。
手順 1 はクライアント コンピューターで実行され、次の手順が含まれます。
- DNS リゾルバー サービスは
IISServer.contoso.com
キャッシュして、この情報が既にキャッシュされているかどうかを確認します。 - DNS リゾルバー サービスは、HOSTS ファイル (C:\Windows\System32\drivers\etc\Hosts) で
IISServer.contoso.com
のマッピングを確認します。 - DNS クライアント サービスは、(IP 構成設定で構成されている) 優先 DNS サーバーに DNS クエリを送信します。
手順 2 は DNS サーバー (ドメイン コントローラー) で行われ、次の手順が含まれます。
- DNS サーバー サービスは、構成済みのゾーンを確認し、ホスト "A" レコードを見つけ、
IISServer.contoso.com
を IP アドレス192.168.2.104
に解決します。 - DNS サーバーは、クライアント コンピューターに IP アドレスを返します。
手順 3 はクライアント コンピューターで行われ、次の手順が含まれます。
- クライアント コンピューターは、TCP ポート 80 を使用して、
IISServer.contoso.com
で TCP 3 方向ハンドシェイクを実行します。 - クライアント コンピューターは、匿名の HTTP 要求を
IISServer.contoso.com
に送信します。
手順 4 はターゲット サーバーで実行され、次の手順が含まれます。
- (
IISServer.contoso.com
として実行されている) Web サービスは、Client1.contoso.com
から要求を受信します。 - Web サービスは、"HTTP 401" チャレンジ応答を含む
Client1.contoso.com
に応答メッセージを送信します。 メッセージでは、優先認証プロバイダーとしてネゴシエートを指定し、セカンダリ認証プロバイダーとして NTLM を指定します。
手順 5 はクライアント コンピューターで行われ、次の手順が含まれます。
- クライアント コンピューターは、
IISServer.contoso.com
からチャレンジ応答メッセージを受信します。 - Microsoft Edge プロセスでは、
IISServer.contoso.com
がローカル イントラネット ゾーンに属していることを確認します。 そのため、認証プロセスでは NTLM ではなく Kerberos を使用する必要があります。 - Microsoft Edge プロセスは LSASS.exe を呼び出して、
IISServer.contoso.com
のサービス チケットを探します。 - この場合、クライアント コンピューターには適切なサービス チケットがありません。 Microsoft Edge プロセスは、チケットの要求を Kerberos 配布センター (KDC) に送信します。
手順 6 はドメイン コントローラーで行われ、次の手順が含まれます。
- ドメイン コントローラー (KDC サービス) は、
Client1.contoso.com
から要求を受信し、SPNHTTP\IISServer.contoso.com
(またはHOST\IISServer.contoso.com
) を使用するサービスを検索します。 - ドメイン コントローラーは、要求されたサービスを、
IISServer.contoso.com
のコンテキストで実行される Web サービスとして識別します。 - ドメイン コントローラーは、
IISServer.contoso.com
Web サービスのサービス チケットを含むクライアント コンピューターに応答を送信します。
手順 7 はドメイン コントローラーで行われ、次の手順が含まれます。
- Microsoft Edge プロセスは、サービス チケットを含む Kerberos アプリケーション プロトコル (AP) メッセージを作成します。
- Microsoft Edge プロセスは、"HTTP 401" チャレンジ応答メッセージに応答して、ap メッセージを
IISServer.contoso.com
に送信します。
手順 8 は Web サーバーで行われ、次の手順が含まれます。
- IIS プロセスは、ローカルLSASS.exeプロセスに対してクエリ を 実行します。
- LSASS.exe プロセスはチケットを復号化し、SessionID と John のグループ メンバーシップを含むユーザーのトークンを作成します。
- LSASS.exe プロセスは、トークンのハンドルを IIS プロセスに返します。
- IIS プロセスは、トークン内のグループ情報をチェックして、John が要求されたページにアクセスするためのアクセス許可を持っていることを確認します。
- IIS プロセスは、要求されたページをブラウザーに送信します。
ネットワーク モニターを使用して認証テストを記録する
「環境 と構成 」セクションで説明されている環境に似た環境でトレース データを収集するには、次の手順を使用します。 このテストでは、「 予期される認証フロー 」セクションで説明されている方法でシステム コンポーネントが対話する必要があります。
注
このセクションの手順を使用するには、ローカルの Administrators グループに属している必要があります。
- クライアント コンピューターで、管理コマンド プロンプト ウィンドウを開き、
ipconfig /flushdns
実行します。 - ネットワーク モニターを開き、記録を開始します。
- Microsoft Edge を開きます。 アドレス バーに「
http://iisserver.contoso.com
」と入力します。 - Microsoft Edge 操作が完了したら、ネットワーク モニターでの記録を停止します。
認証テストで生成されるデータを確認する
認証テストでは、次の情報が生成されます。
- ネットワーク モニターのトレース データ
- チケット データ
- 認証イベントにおける監査の成功と失敗のイベントデータ
このセクションの残りの部分では、認証フローで生成されるデータについて詳しく説明します。
重要なイベントのトレース データを確認する
トレース データで、次のトレースの抜粋のような情報を探します。
ホスト "A" レコードのドメイン コントローラーに対する DNS クエリ
IISServer.contoso.com
:3005 00:59:30.0738430 Client1.contoso.com DCA.contoso.com DNS DNS:QueryId = 0x666A, QUERY (Standard query), Query for iisserver.contoso.com of type Host Addr on class Internet
ドメイン コントローラー上の DNS サービスからの DNS 応答:
3006 00:59:30.0743438 DCA.contoso.com Client1.contoso.com DNS DNS:QueryId = 0x666A, QUERY (Standard query), Response - Success, 192.168.2.104
IISServer.contoso.com
IIS Web サーバーへのClient1.contoso.com
上の Microsoft Edge プロセスからの匿名要求:3027 00:59:30.1609409 Client1.contoso.com iisserver.contoso.com HTTP HTTP:Request, GET / Host: iisserver.contoso.com
IISServer.contoso.com
からClient1.contoso.com
への HTTP 401 チャレンジ応答メッセージ:3028 00:59:30.1633647 iisserver.contoso.com Client1.contoso.com HTTP HTTP:Response, HTTP/1.1, Status: Unauthorized, URL: /favicon.ico Using Multiple Authetication Methods, see frame details WWWAuthenticate: Negotiate WWWAuthenticate: NTLM
SPN (TGS 要求メッセージとも呼ばれます) として
HTTP/iisserver.contoso.com
を使用するサービスのClient1.contoso.com
からドメイン コントローラーへのサービス チケット要求DCA.contoso.com
。3034 00:59:30.1834048 Client1.contoso.com DCA.contoso.com KerberosV5 KerberosV5:TGS Request Realm: CONTOSO.COM Sname: HTTP/iisserver.contoso.com
IISServer.contoso.com
のサービス チケット (TGS 応答メッセージとも呼ばれます) を含むDCA.contoso.com
からのサービス チケット応答:3036 00:59:30.1848687 DCA.contoso.com Client1.contoso.com KerberosV5 KerberosV5:TGS Response Cname: John Ticket: Realm: CONTOSO.COM, Sname: HTTP/iisserver.contoso.com Sname: HTTP/iisserver.contoso.com
Client1.contoso.com
の Microsoft Edge プロセスからIISServer.contoso.com
への 2 番目の要求。 このメッセージには、サービス チケットが含まれています。3040 00:59:30.1853262 Client1.contoso.com iisserver.contoso.com HTTP HTTP:Request, GET /favicon.ico , Using GSS-API Authorization Authorization: Negotiate Authorization: Negotiate YIIHGwYGKwYBBQUCoIIHDzCCBwugMDAuBgkqhkiC9xIBAgIGCSqGSIb3EgECAgYKKwYBBAGCNwICHgYKKwYBBAGCNwICCqKCBtUEggbRYIIGzQYJKoZIhvcSAQICAQBugga8MIIGuKADAgEFoQMCAQ6iBwMFACAAAACjggTvYYIE6zCCBOegAwIBBaENGwtDT05UT1NPLkNPTaIoMCagAwIBAqEfMB0bBEhUVFAbF SpnegoToken: 0x1 NegTokenInit: ApReq: KRB_AP_REQ (14) Ticket: Realm: CONTOSO.COM, Sname: HTTP/iisserver.contoso.com
IIS サーバーから
Client1.contoso.com
へのメッセージ。 このメッセージは、ユーザーが認証および承認されていることを示します。3044 00:59:30.1875763 iisserver.contoso.com Client1.contoso.com HTTP HTTP:Response, HTTP/1.1, Status: Not found, URL: / , Using GSS-API Authentication WWWAuthenticate: Negotiate oYG2MIGzoAMKAQChCwYJKoZIgvcSAQICooGeBIGbYIGYBgkqhkiG9xIBAgICAG+BiDCBhaADAgEFoQMCAQ+ieTB3oAMCARKicARuIF62dHj2/qKDRV5XjGKmyFl2/z6b9OHTCTKigAatXS1vZTVC1dMvtNniSN8GpXJspqNvEfbETSinF0ee7KLaprxNgTYwTrMVMnd95SoqBkm/FuY7WbTAuPvyRmUuBY3EKZEy NegotiateAuthorization: GssAPI: 0x1 NegTokenResp: ApRep: KRB_AP_REP (15)
クライアント コンピューターでチケット情報を確認する
クライアント コンピューターのコマンド プロンプトで、 klist tickets
を実行します。 出力は次の抜粋のようになります。
Client: John @ CONTOSO.COM
Server: HTTP/iisserver.contoso.com @ CONTOSO.COM
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x40a10000 -> forwardable renewable pre_authent name_canonicalize
Start Time: 11/28/2022 0:59:30 (local)
End Time: 11/28/2022 10:58:56 (local)
Renew Time: 12/5/2022 0:58:56 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
Cache Flags: 0
Kdc Called: DCA.contoso.com
ターゲット サーバーの監査イベントを確認する
IISServer.contoso.com
のイベント ビューアーで、Windows ログ>セキュリティ ログに移動して、サインイン (ログオン) イベントを確認します。 イベント ID 4624 または 4625 のインスタンスを探し、次のフィールドを確認します。
- キーワード: 監査の成功 または 監査の失敗
- ログオンの種類: 3 (ネットワーク ログオン)
- [新しいログオン] フィールドのセキュリティ ID: Contoso\John
- 送信元ネットワーク アドレス: クライアント コンピューターの IP アドレス
- ログオン プロセス と 認証パッケージ: Kerberos
イベント レコードのフルテキストは、次の抜粋のようになります。
Log Name: Security
Source: Microsoft-Windows-Security-Auditing
Date: 11/28/2022 12:59:30 AM
Event ID: 4624
Task Category: Logon
Level: Information
Keywords: Audit Success
User: N/A
Computer: IISServer.contoso.com
Description:
An account was successfully logged on.
Subject:
Security ID: NULL SID
Account Name: -
Account Domain: -
Logon ID: 0x0
Logon Information:
Logon Type: 3
Restricted Admin Mode: -
Virtual Account: No
Elevated Token: No
Impersonation Level: Impersonation
New Logon:
Security ID: CONTOSO\John
Account Name: John
Account Domain: CONTOSO.COM
Logon ID: 0x1B64449
Linked Logon ID: 0x0
Network Account Name: -
Network Account Domain: -
Logon GUID: {<GUID>}
Process Information:
Process ID: 0x0
Process Name: -
Network Information:
Workstation Name: -
Source Network Address: 192.168.2.101
Source Port: 52655
Detailed Authentication Information:
Logon Process: Kerberos
Authentication Package: Kerberos
認証ワークフローのトラブルシューティング
ネットワーク トレースを確認して、問題が発生したプロセス内の場所を絞り込むことができるように、どのステップが失敗するかを確認します。 この情報を使用して、問題の解決に役立つトラブルシューティング方法を決定します。
ネットワーク接続を確認する
DNS または TCP 通信に問題がある場合は、次の操作を確認します。
クライアント コンピューター (
Client1.contoso.com
) からターゲット サーバー (IISServer.contoso.com
) の名前を解決できることを確認します。DNS サーバーがターゲット サーバーの IP アドレスを正しく解決していることを確認します。 これを行うには、PowerShell ウィンドウを開き、次のコマンドレットを実行します。
Resolve-DnsName -Name IISServer.contoso.com
このコマンドレットの出力は、次の抜粋のようになります。
Name Type TTL Section IPAddress ---- ---- --- ------- --------- IISServer.contoso.com A 1200 Answer 192.168.2.104
クライアント コンピューターとターゲット サーバーの間で、必要なネットワーク ポートが開かれていることを確認します。 これを行うには、以下のコマンドレットを実行します。
Test-NetConnection -Port 80 IISServer.contoso.com
このコマンドレットの出力は、次の抜粋のようになります。
ComputerName : IISServer.contoso.com RemoteAddress : 192.168.2.104 RemotePort : 80 InterfaceAlias : Ethernet 2 SourceAddress : 192.168.2.101 TcpTestSucceeded : True
クライアント コンピューターでチケット情報を確認する
Web サイトにアクセスしようとしているユーザーのコンテキストで、(管理コマンド プロンプト ウィンドウではなく) 標準のコマンド プロンプト ウィンドウを開きます。
指定された順序で次のコマンドを実行します。
klist purge klist get http/iisserver.contoso.com
これらのコマンドの出力は、次の抜粋のようになります。
Current LogonId is 0:0xa8a98b A ticket to http/iisserver.contoso.com has been retrieved successfully. Cached Tickets: (2) #0> Client: John @ CONTOSO.COM Server: krbtgt/CONTOSO.COM @ CONTOSO.COM KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96 Ticket Flags 0x40e10000 -> forwardable renewable initial pre_authent name_canonicalize Start Time: 11/28/2022 1:28:11 (local) End Time: 11/28/2022 11:28:11 (local) Renew Time: 12/5/2022 1:28:11 (local) Session Key Type: AES-256-CTS-HMAC-SHA1-96 Cache Flags: 0x1 -> PRIMARY Kdc Called: DCA.contoso.com #1> Client: John @ CONTOSO.COM Server: http/iisserver.contoso.com @ CONTOSO.COM KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96 Ticket Flags 0x40a10000 -> forwardable renewable pre_authent name_canonicalize Start Time: 11/28/2022 1:28:11 (local) End Time: 11/28/2022 11:28:11 (local) Renew Time: 12/5/2022 1:28:11 (local) Session Key Type: AES-256-CTS-HMAC-SHA1-96 Cache Flags: 0 Kdc Called: DCA.contoso.com
この抜粋は、チケットが正常に取得されたことを示しています。 チケットの詳細は、[キャッシュされたチケット] セクションに "#1>" というラベルが付けられます。
IIS Web サービスが既定の資格情報を使用して IIS サーバーで実行されていることを確認します
Web サイトにアクセスしようとしているユーザーのコンテキストで、(管理 PowerShell プロンプト ウィンドウではなく) 標準の PowerShell プロンプト ウィンドウを開きます。
invoke-webrequest -Uri http://IIsserver.contoso.com -UseDefaultCredentials
これらのコマンドの出力は、次の抜粋のようになります。
StatusCode : 200
StatusDescription : OK
Content : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" cont...
RawContent : HTTP/1.1 200 OK
Persistent-Auth: true
Accept-Ranges: bytes
Content-Length: 703
Content-Type: text/html
Date: Mon, 28 Nov 2022 09:31:40 GMT
ETag: "3275ea8a1d91:0"
Last-Modified: Fri, 25 Nov 2022...
ターゲット サーバーのセキュリティ イベント ログを確認する
ターゲット サーバーのイベント ビューアーで、 Windows ログ>セキュリティ ログに移動します。 イベント ID 4624 (Audit Success) または 4625 (Audit Failure) のインスタンスを探します。
他のサービスが正しく機能することを確認する
ターゲット サーバー上の他のサービスが Kerberos 認証を処理できることを確認するには、次の手順に従います。
ターゲット サーバーで、テストに使用するファイル共有を作成するか、既存のファイル共有を識別します。 自分 ("John" のロール) がフォルダーに対する読み取りアクセス許可を持っていることを確認します。
クライアント コンピューターで (ユーザー "John" として) サインインし、Windows エクスプローラーを開きます。
アドレス バーに「 \\IISServer.contoso.com \Software$」と入力します。
ターゲット サーバーでイベント ビューアーを開き、セキュリティ イベントを確認します。 新しいイベント ID 4624 イベント、またはイベント ID 4625 イベントがあることを確認します。
クライアント コンピューターで、コマンド プロンプトで
klist tickets
コマンドを実行します。 コマンド出力には、次の抜粋に示すように、CIFS/IISServer.contoso.com
のサービス チケットが含まれている必要があります。#1> Client: John @ CONTOSO.COM Server: cifs/iisserver.contoso.com @ CONTOSO.COM KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96 Ticket Flags 0x40a10000 -> forwardable renewable pre_authent name_canonicalize Start Time: 11/28/2022 1:40:22 (local) End Time: 11/28/2022 11:28:11 (local) Renew Time: 12/5/2022 1:28:11 (local) Session Key Type: AES-256-CTS-HMAC-SHA1-96 Cache Flags: 0 Kdc Called: DCA.contoso.com