Kerberos 驗證疑難解答指引
本指南提供針對 Kerberos 驗證問題進行疑難解答時所使用的基本概念。
疑難排解檢查清單
Kerberos 相關錯誤是另一個服務失敗的症狀。 Kerberos 通訊協定依賴許多必須可供使用且正常運作的服務,才能進行任何驗證。
若要判斷 Kerberos 驗證是否發生問題,請在用戶端、目標伺服器或提供驗證的域控制器上使用「來源」篩選系統事件記錄檔中是否有任何服務的錯誤,例如 Kerberos、kdc、LsaSrv 或 Netlogon。 如果存在任何此類錯誤,也可能存在與 Kerberos 通訊協定關聯的錯誤。
目標伺服器安全性事件記錄檔上的失敗稽核可能會顯示發生登入失敗時正在使用 Kerberos 通訊協定。
檢查 Kerberos 通訊協定之前,確定下列服務或條件正常運作:
- 網路基礎結構正常運作,而且所有電腦和服務都可以通訊。
- 網域控制站可供存取。 您可以在用戶端或目標伺服器上執行 命令
nltest /dsgetdc:<Domain Name> /force /kdc
(例如nltest /dsgetdc:contoso.com /force /kdc
)。 - 網域名稱系統 (DNS) 已正確設定,並適當地解析主機名稱和服務。
- 時鐘會跨網域進行同步處理。
- 已安裝 Windows Server 的所有重大更新和安全性更新。
- 所有軟體 (包括非 Microsoft 軟體) 都會更新。
- 如果您正在執行伺服器作業系統,電腦會重新啟動。
- 所需的服務和伺服器可用。 Kerberos 驗證通訊協定需要正常運作的網域控制站、DNS 基礎結構和網路才能正常運作。 在開始對 Kerberos 通訊協定進行疑難排解之前,請先確認您可以存取這些資源。
如果您已檢查所有這些條件,但仍發生驗證問題或 Kerberos 錯誤,則需要進一步尋找解決方案。 這些問題可能是由 Kerberos 通訊協定的設定方式或與 Kerberos 通訊協定搭配使用的其他技術的設定方式所造成。
常見問題與解決方案
Kerberos 委派問題
在一般案例中,模擬帳戶會是指派給 Web 應用程式的服務帳戶或 Web 伺服器的電腦帳戶。 模擬帳戶是需要透過 Web 應用程式存取資源的用戶帳戶。
使用 Kerberos 有三種類型的委派:
完整委派(不受限制的委派)
應盡可能避免完整委派。 使用者 (前端使用者和後端使用者) 可以位於不同的網域,也可以位於不同的樹系中。
限制委派 (僅限 Kerberos 和通訊協定轉換)
用戶可以來自任何網域或樹系,但前端和後端服務應該在相同的網域中執行。
以資源為基礎的限制委派 (RBCD)
用戶可以來自任何網域,而前端和後端資源可以來自任何網域或樹系。
最常見的 Kerberos 委派疑難解答
- 服務主體名稱遺失或重複
- 名稱解析失敗或不正確的回應(為伺服器名稱指定錯誤的IP位址)
- 大型 Kerberos 票證大小 (MaxTokenSize) 和環境未正確設定
- 連接埠被防火牆或路由器封鎖
- 服務帳戶未獲得適當的權限 (使用者權限指派)
- 前端或後端服務不在相同的網域和限制委派設定中(而非 RBCD)
如需詳細資訊,請參閱
單一登錄 (SSO) 中斷,並提示驗證一次
請考量下列案例:
- 用戶端和伺服器應用程式,例如 Microsoft Edge 和 網際網路資訊服務 (IIS) 伺服器。 IIS 伺服器是使用 Windows 驗證設定的(交涉)。
- 用戶端和伺服器應用程式,例如SMB用戶端和SMB伺服器。 根據預設,SMB 伺服器會設定為交涉安全性支援提供者介面 (SSPI)。
使用者Microsoft Edge 開啟,並瀏覽內部網站 http://webserver.contoso.com
。 網站已設定 為 Negotiate,且此網站會提示進行驗證。 在使用者手動輸入使用者名稱和密碼之後,使用者會取得驗證,且網站如預期般運作。
注意
此案例是客戶端和伺服器的範例。 針對設為使用整合式 Windows 驗證的任何用戶端或伺服器,疑難排解技術都相同。
整合式 Windows 驗證 會在用戶層級或計算機層級中斷。
疑難排解方法
檢閱整合式驗證設定的用戶端組態,此設定可在應用程式或機器層級啟用。 例如,所有 HTTP 型應用程式在嘗試執行整合式驗證時,都會尋找網站位於信任區域中。
開啟 inetcpl.cpl (因特網選項),所有 HTTP 型應用程式都用於 Internet Explorer 設定,並檢閱網站是否已設定為近端內部網路。
應用程式也有執行整合式 Windows 驗證的組態。
Microsoft Edge 或 Internet Explorer 具有啟用整合式 Windows 驗證的設定。
檢閱應用程式組態,用戶端計算機可以取得指定服務主體名稱 (SPN) 的 Kerberos 票證。 在這裡範例中,SPN 是
http/webserver.contoso.com
。當您找到 SPN 時的成功訊息:
C:>klist get http/webserver.contoso.com Current LogonId is 0:0x9bd1f A ticket to http/webserver.contoso.com has been retrieved successfully.
找不到 SPN 時的錯誤訊息:
C:>klist get http/webserver.contoso.com klist failed with 0xc000018b/-1073741429: The SAM database on the Windows Server does not have a computer account for this workstation trust relationship.
識別並新增個別 SPN 至適當的用戶、服務或電腦帳戶。
如果您識別出可以擷取 SPN,您可以使用下列命令來確認是否已在正確的帳戶上註冊它們:
setspn -F -Q */webserver.contoso.com
驗證 DC 探索問題
使用整合式 Windows 驗證 設定的應用程式伺服器需要域控制器(DC)來驗證使用者/計算機和服務。
在驗證程式期間無法連絡域控制器會導致錯誤 1355:
指定的網域不存在或無法連絡
無法存取使用整合式 Windows 驗證 設定的資源,並出現錯誤 1355
注意
錯誤訊息可能與應用程式觀點不同,但錯誤的意義在於用戶端或伺服器無法探索域控制器。
以下是這類錯誤訊息的範例:
-
嘗試加入網域 "Contoso" 時發生下列錯誤:
指定的網域不存在或連不上。 -
找不到網域 contoso.com 的網域控制站
-
無法連絡網域控制站 1355
問題的主要原因
用戶端上的 DNS 設定錯誤
您可以執行
ipconfig /all
命令並檢閱 DNS 伺服器清單。受信任網域或樹系中域控制器上的 DNS 設定錯誤
用戶端與域控制器之間的網路埠遭到封鎖
DC 探索埠:UDP 389 (UDP LDAP) 和 UDP 53 (DNS)
疑難排解步驟
nslookup
執行 命令來識別任何 DNS 設定錯誤。- 在用戶端與域控制器之間開啟必要的埠。 如需詳細資訊,請參閱如何設定 Active Directory 網域及信任的防火牆 (部分為機器翻譯)。
記錄分析測試案例
環境和組態
用戶端電腦
Client1.contoso.com
(Windows 11 計算機) 加入網域Contoso.com
。使用者
John
使用者屬於
Contoso.com
用戶端電腦並登入。用戶端電腦上的因特網選項
所有網站都是近端內部網路區域的一部分。
伺服器
IISServer.contoso.com
(Windows Server 2019) 加入網域Contoso.com
。驗證設定
Windows 驗證已啟用。
驗證提供者:交涉
啟用的提供者設定如下:
驗證流程
- 使用者
John
登入Client1.contoso.com
,會開啟 Microsoft Edge 瀏覽器並連線至IISServer.contoso.com
。 - 用戶端電腦將會執行下列步驟(上圖中的步驟 1):
- DNS 解析程式會
IISServer.contoso.com
快取以確認是否已快取此資訊。 - DNS 解析程式會檢查 HOSTS 檔案中任何位於 C:\Windows\System32\drivers\etc\Hosts 中的對應
IISServer.contoso.com
。 - 將 DNS 查詢傳送至慣用的 DNS 伺服器(在 IP 組態設定上設定),這也是環境中的域控制器。
- DNS 解析程式會
- 在域控制器上執行的 DNS 服務會查看其設定的區域、解析主機 A 記錄,並使用 IP 位址
IISServer.contoso.com
回應 (上圖中的步驟 2)。 - 用戶端電腦會在 TCP 連接埠 80 上執行 TCP 三向交握至
IISServer.contoso.com
。 - 用戶端電腦會將匿名 HTTP 要求傳送至
IISServer.contoso.com
。 - 在埠 80 上接聽的 IIS 伺服器會收到 要求
Client1.contoso.com
,查看 IIS 伺服器驗證組態,並將 HTTP 401 挑戰回應傳回給用戶端電腦,並搭配交涉作為驗證組態(上圖中的步驟 3)。 - 在上
Client1.contoso.com
執行的 Microsoft Edge 進程會知道 IIS 伺服器已設定交涉,且會驗證網站是否為近端內部網路區域的一部分。 如果網站位於本機內部網路區域,則Microsoft Edge 程式會呼叫 LSASS.exe ,以取得具有SPNHTTP\IISServer.contoso.com
的 Kerberos 票證(上圖中的步驟 5)。 - 域控制器 (KDC 服務) 會從
Client1.contoso.com
接收要求,並搜尋其資料庫的SPN,並尋找IISServer.contoso.com
已使用此SPNHTTP\IISServer.contoso.com
進行設定。 - 域控制器會以具有 IIS 伺服器票證的 TGS 回應來回應 (上圖中的步驟 6)。
- 用戶端電腦上的Microsoft Edge 程式將會使用域控制器發出的 Kerberos TGS 票證,將 Kerberos 應用程式通訊協定 (AP) 要求傳送給 IIS 網頁伺服器。
- IIS 程式會呼叫 網頁伺服器上的 LSASS.exe ,以解密票證,並使用 SessionID 和 Users 群組成員資格建立令牌以進行授權。
- IIS 程式會從 LSASS.exe 取得令牌的句柄,以做出授權決策,並允許使用者與 AP 回應連線。
工作流程的網路監視器分析
注意
您必須是本機 Administrators 群組的使用者,才能執行下列活動。
在用戶端電腦上安裝Microsoft網路監視器 (
Client1.contoso.com
)。在提升權限的指令提示字元視窗中執行下列指令 (cmd.exe):
ipconfig /flushdns
啟動網路監視器。
開啟 Microsoft Edge 瀏覽器, 然後輸入
http://iisserver.contoso.com
。網路追蹤分析:
主機 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
上的
Client1.contoso.com
Microsoft Edge 進程會連線到 IIS 網頁伺服器IISServer.contoso.com
(匿名連線)。3027 00:59:30.1609409 Client1.contoso.com iisserver.contoso.com HTTP HTTP:Request, GET / Host: iisserver.contoso.com
IIS 伺服器會回應 HTTP 回應 401:交涉和 NTLM(在 IIS 伺服器上執行的組態)。
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
來自的 Kerberos 要求
Client1.contoso.com
會使用 SPN 傳送至域控制器DCA.contoso.com
:HTTP/iisserver.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
域控制器
DCA.contoso.com
會回應 Kerberos 要求,其具有具有 Kerberos 票證的 TGS 回應。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
Microsoft Edge 進程
Client1.contoso.com
現在會使用 Kerberos AP 要求前往 IIS 伺服器。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 伺服器會回應驗證完成的回應。
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
執行 命令以檢閱 上的命令輸出Client1.contoso.com
中的 Kerberos 票證。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
檢閱 IIS 伺服器上的事件識別碼 4624,其中顯示
Success
稽核:
根據預設,
Success
會在 Windows 的所有伺服器作業系統上啟用 或Failure
稽核。 您可以透過下列命令來確認稽核是否已啟用。如果您發現未啟用稽核,請啟用稽核。 檢閱下列清單中的登入類別。 如您所觀察,登入子類別已啟用
Success and Failure
。C:\>auditpol /get /Subcategory:"logon" System audit policy Category/Subcategory Setting Logon/Logoff Logon Success and Failure
如果您沒有觀察到使用
Success and Failure
登入,請執行 命令以啟用它:C:\>auditpol /set /subcategory:"Logon" /Success:enable /Failure:enable The command was successfully executed.
檢閱 IISServer.contoso.com 上的成功安全性事件標識碼 4624
觀察下列欄位:
Logon type
:3(網路登入)Security ID
欄位中New Logon
:Contoso\John
Source Network Address
:用戶端電腦的IP位址Logon Process
與Authentication Package
: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
針對驗證工作流程進行疑難排解
使用下列其中一種方法來針對問題進行疑難解答。
確認您是否可以從 解析 IIS 網頁伺服器的名稱。
IISServer.contoso.com
Client1.contoso.com
。使用下列 Cmdlet 確認 DNS 伺服器是否回應正確的 IIS 伺服器 IP 位址:
PS C:\> Resolve-DnsName -Name IISServer.contoso.com Name Type TTL Section IPAddress ---- ---- --- ------- --------- IISServer.contoso.com A 1200 Answer 192.168.2.104
使用下列 Cmdlet 確認用戶端電腦與 IIS 網頁伺服器之間
IISServer.contoso.com
是否開啟網路連接埠:PS C:\> 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
確認您是否從域控制器取得 Kerberos 票證。
在嘗試存取網站的用戶內容中,開啟一般命令提示字元(不是系統管理員命令提示字元)。
執行
klist purge
命令。如下所示執行
klist get http/iisserver.contoso.com
命令:PS C:\> 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
您會發現您會在資料行中
Cached Ticket (2)
取得SPNhttp/IISServer.contoso.com
的 Kerberos 票證。
確認 IIS Web 服務是否使用預設認證在 IIS 伺服器上執行。
在嘗試存取網站的用戶內容中,開啟一般的 PowerShell 提示字元(不是系統管理員 PowerShell 提示字元)。
PS C:\> invoke-webrequest -Uri http://IIsserver.contoso.com -UseDefaultCredentials PS C:\> 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...
檢閱 IIS 伺服器上的安全性事件記錄檔:
- 成功事件記錄檔 4624
- 錯誤事件記錄檔 4625
隔離程式:您可以使用下列疑難解答步驟來驗證 IIS 伺服器上的其他服務是否可以處理 Kerberos 驗證。
先決條件:
IIS 伺服器應該執行 Windows 的伺服器版本。
IIS 伺服器應該已針對SMB等服務開啟埠(埠445)。
建立新的共用,或為使用者提供
John
在計算機上已共用的其中一個資料夾 (例如 Software$) 上讀取的許可權。登入
Client1.contoso.com
。開啟 [Windows 檔案總管]。
輸入 \IISServer.contoso.com \Software$。
開啟 [安全性事件]
IISServer.contoso.com
,並確認您是否觀察到事件標識碼 4624。以使用者
John
身分開啟的一般命令提示字元Client1.contoso.com
。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
收集上的
Client1.contoso.com
網路追蹤。 檢閱網路追蹤以觀察哪個步驟失敗,以便進一步縮小步驟範圍,並針對問題進行疑難解答。