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 應用程式存取資源的用戶帳戶。
使用 Kerberos 的委派有三種類型:
完整委派 (不受限制的委派)
應盡可能避免完整委派。 使用者 (前端使用者和後端使用者) 可以位於不同的網域,也可以位於不同的樹系中。
限制委派 (僅限 Kerberos 和通訊協定轉換)
用戶可以來自任何網域或樹系,但前端和後端服務應該在相同的網域中執行。
資源型限制委派 (RBCD)
用戶可以來自任何網域,而前端和後端資源可以來自任何網域或樹系。
最常見的 Kerberos 委派疑難解答
- 服務主體名稱遺失或重複
- 名稱解析失敗或回應不正確, (為伺服器提供錯誤的IP位址)
- MaxTokenSize (大型 Kerberos 票證) 和環境未正確設定
- 防火牆或路由器封鎖的埠
- 服務帳戶未在用戶權力指派 (授與適當的許可權)
- 不在相同網域和限制委派設定的前端或後端服務
如需詳細資訊,請參閱:
單一登錄 (SSO) 中斷並提示驗證一次
請考量下列案例:
- 用戶端和伺服器應用程式,例如 Microsoft Edge 和 Internet Information Services (IIS) 伺服器。 IIS 伺服器是使用 Windows 驗證 (交涉) 來設定。
- 用戶端和伺服器應用程式,例如SMB用戶端和SMB伺服器。 根據預設,SMB 伺服器是使用交涉安全性支援提供者介面 (SSPI) 來設定。
使用者開啟 Microsoft Edge 並瀏覽內部網站 http://webserver.contoso.com
。 網站是以 Negotiate 設定,而此網站會提示您進行驗證。 在使用者手動輸入使用者名稱和密碼之後,使用者會取得驗證,而且網站會如預期般運作。
注意事項
此案例是客戶端和伺服器的範例。 針對使用整合式 Windows 驗證 設定的任何用戶端和伺服器,疑難解答技術都相同。
整合 Windows 驗證 會在用戶層級或計算機層級中斷。
疑難解答方法
檢閱用戶端組態以取得可在應用程式或計算機層級啟用的整合式驗證設定。 例如,當嘗試執行整合式驗證時,所有以 HTTP 為基礎的應用程式都會尋找位於信任區域中的網站。
開 啟inetcpl.cpl (Internet Options) ,所有以 HTTP 為基礎的應用程式都會用於 Internet Explorer 設定,並檢閱網站是否設定為 近端內部網路。
應用程式也有執行整合式 Windows 驗證的組態。
Microsoft Edge 或 Internet Explorer 已設定 [ 啟用整合式 Windows 驗證 ] 以啟用。
檢閱應用程式組態,用戶端計算機可以取得指定服務主體名稱的 Kerberos 票證, (SPN) 。 在這裡範例中,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 查詢傳送至在 IP 組態設定) 上設定的慣用 DNS 伺服器 (,這也是環境中的域控制器。
- DNS 解析程式會快取
- 在域控制器上執行的 DNS 服務會查看其設定的區域、解析主機 A 記錄,並以上述圖表中步驟 2 (IP 位址
IISServer.contoso.com
回應) 。 - 用戶端電腦會在 TCP 連接埠 80
IISServer.contoso.com
上對 執行 TCP 三向交握。 - 用戶端電腦會將匿名 HTTP 要求傳送至
IISServer.contoso.com
。 - 接聽埠 80 的 IIS 伺服器會收到來自
Client1.contoso.com
的要求,請查看 IIS 伺服器驗證設定,並將 HTTP 401 挑戰回應傳回給用戶端電腦,並使用交涉作為上述圖表中步驟 3 (驗證組態) 。 - 在上
Client1.contoso.com
執行的 Microsoft Edge 進程會知道 IIS 伺服器已使用 Negotiate 設定,並會確認網站是否為近端內部網路區域的一部分。 如果網站位於近端內部網路區域中,則 Microsoft Edge 進程會呼叫 LSASS.exe ,以取得具有上述圖表中步驟 5 之 SPNHTTP\IISServer.contoso.com
(Kerberos 票證) 。 - KDC 服務 (域控制器) 會收到來自
Client1.contoso.com
的要求,並搜尋其資料庫中的SPN,並使用此SPNHTTP\IISServer.contoso.com
設定 findIISServer.contoso.com
。 - 域控制器會以 TGS 回應回應,並使用上述圖表) 中步驟 6 (IIS 伺服器的票證。
- 客戶端電腦上的 Microsoft Edge 進程會使用域控制器所簽發的 Kerberos TGS 票證,將 Kerberos 應用程式通訊協定 (AP) 要求傳送至 IIS 網頁伺服器。
- IIS 程式會呼叫 Web 伺服器上的 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 伺服器上顯示
Success
稽核的事件識別碼 4624:
根據預設,
Success
或Failure
稽核會在 Windows 的所有伺服器作業系統上啟用。 您可以使用下列命令來確認稽核是否已啟用。如果您發現稽核未啟用,請啟用稽核。 檢閱下列清單中的登入類別。 如您所觀察,登入子類別是使用 啟用。
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
您會發現您會在 資料行中取得SPN
http/IISServer.contoso.com
的Cached Ticket (2)
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
網路追蹤。 檢閱網路追蹤以觀察哪個步驟失敗,以便進一步縮小步驟並針對問題進行疑難解答。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應