共用方式為


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)

疑難排解步驟

  1. nslookup執行 命令以識別任何 DNS 設定錯誤。
  2. 開啟用戶端與域控制器之間的必要埠。 如需詳細資訊,請參閱 如何設定 Active Directory 網域和信任的防火牆

記錄分析測試案例

環境和設定

  • 用戶端電腦

    Client1.contoso.com (Windows 11 電腦) 加入網域 Contoso.com

  • 使用者 John

    用戶屬於 Contoso.com ,並登入客戶端計算機。

  • 用戶端電腦上的因特網選項

    所有網站都是近端內部網路區域的一部分。

    Internet Properties 的螢幕快照,其中顯示所有網站都是本機內部網路區域的一部分。

  • 伺服器

    IISServer.contoso.com (Windows Server 2019) 加入網域 Contoso.com

  • 驗證組態

    Windows 驗證已啟用

    [Internet Information Services 管理員] 視窗的螢幕快照,其中顯示 [已啟用 Windows 驗證]。

  • 驗證提供者:交涉

    已啟用的提供者設定如下:

    [提供者] 視窗的螢幕快照,其中顯示 [已啟用的提供者包含交涉]。

驗證流程

驗證流程的螢幕快照。

  1. 使用者 John 登入 Client1.contoso.com,開啟 Microsoft Edge 瀏覽器並連線到 IISServer.contoso.com
  2. 用戶端電腦會在上述圖表 (步驟 1 中執行下列步驟) :
    1. DNS 解析程式會快取 IISServer.contoso.com 以確認此資訊是否已快取。
    2. DNS 解析程式會檢查 HOSTS 檔案是否有位於 C:\Windows\System32\drivers\etc\Hosts 中的任何IISServer.contoso.com對應。
    3. 將 DNS 查詢傳送至在 IP 組態設定) 上設定的慣用 DNS 伺服器 (,這也是環境中的域控制器。
  3. 在域控制器上執行的 DNS 服務會查看其設定的區域、解析主機 A 記錄,並以上述圖表中步驟 2 (IP 位址 IISServer.contoso.com 回應) 。
  4. 用戶端電腦會在 TCP 連接埠 80 IISServer.contoso.com上對 執行 TCP 三向交握。
  5. 用戶端電腦會將匿名 HTTP 要求傳送至 IISServer.contoso.com
  6. 接聽埠 80 的 IIS 伺服器會收到來自 Client1.contoso.com的要求,請查看 IIS 伺服器驗證設定,並將 HTTP 401 挑戰回應傳回給用戶端電腦,並使用交涉作為上述圖表中步驟 3 (驗證組態) 。
  7. 在上 Client1.contoso.com 執行的 Microsoft Edge 進程會知道 IIS 伺服器已使用 Negotiate 設定,並會確認網站是否為近端內部網路區域的一部分。 如果網站位於近端內部網路區域中,則 Microsoft Edge 進程會呼叫 LSASS.exe ,以取得具有上述圖表中步驟 5 之 SPN HTTP\IISServer.contoso.com (Kerberos 票證) 。
  8. KDC 服務 (域控制器) 會收到來自 Client1.contoso.com的要求,並搜尋其資料庫中的SPN,並使用此SPN HTTP\IISServer.contoso.com 設定 find IISServer.contoso.com
  9. 域控制器會以 TGS 回應回應,並使用上述圖表) 中步驟 6 (IIS 伺服器的票證。
  10. 客戶端電腦上的 Microsoft Edge 進程會使用域控制器所簽發的 Kerberos TGS 票證,將 Kerberos 應用程式通訊協定 (AP) 要求傳送至 IIS 網頁伺服器。
  11. IIS 程式會呼叫 Web 伺服器上的 LSASS.exe 來解密票證,並使用 SessionID 和 Users 群組成員資格建立令牌以進行授權。
  12. IIS 程式會取得從 LSASS.exe 到令牌的句柄,以做出授權決策,並允許使用者與 AP 回應連線。

工作流程的網路監視器分析

注意事項

您必須是本機 Administrators 群組的使用者,才能執行下列活動。

  1. 在用戶端電腦上安裝 Microsoft 網路監視器 (Client1.contoso.com) 。

  2. 在提升許可權的命令提示字元視窗中執行下列命令, (cmd.exe) :

    ipconfig /flushdns
    
  3. 啟動網路監視器。

  4. 開啟 Microsoft Edge 瀏覽器, 然後輸入 http://iisserver.contoso.com

  5. 網路追蹤分析:

    1. 主機 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
      
    2. 域控制器上來自 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
      
    3. 上的 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
      
    4. 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
      
    5. 來自的 Kerberos 要求 Client1.contoso.com 會使用 SPN 傳送到域控制器 DCA.contoso.comHTTP/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
      
    6. 域控制器 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
      
    7. 上的 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
      
    8. 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)
      
  6. 執行 命令, 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
    
  7. 檢閱 IIS 伺服器上顯示 Success 稽核的事件識別碼 4624:

  • 根據預設, SuccessFailure 稽核會在 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 LogonContoso\John
  • Source Network Address:用戶端電腦的IP位址
  • Logon ProcessAuthentication PackageKerberos
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 票證。

    1. 在嘗試存取網站的用戶內容中,開啟一般命令提示字元 (不是系統管理員命令提示字元) 。

    2. 執行 klist purge 命令。

    3. 執行命令, 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.comCached 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$) 。

      1. 登入Client1.contoso.com

      2. 開啟 [Windows 檔案總管]。

      3. 輸入 \IISServer.contoso.com \Software$

      4. 開啟 [安全性 IISServer.contoso.com 事件],並確認您是否觀察到事件標識碼 4624。

      5. 以使用者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
        
      6. 收集上的 Client1.contoso.com網路追蹤。 檢閱網路追蹤以觀察哪個步驟失敗,以便進一步縮小步驟並針對問題進行疑難解答。