共用方式為


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)

疑難排解步驟

  1. nslookup執行 命令來識別任何 DNS 設定錯誤。
  2. 在用戶端與域控制器之間開啟必要的埠。 如需詳細資訊,請參閱如何設定 Active Directory 網域及信任的防火牆 (部分為機器翻譯)。

記錄分析測試案例

環境和組態

  • 用戶端電腦

    Client1.contoso.com (Windows 11 計算機) 加入網域 Contoso.com

  • 使用者 John

    使用者屬於 Contoso.com 用戶端電腦並登入。

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

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

    因特網屬性的螢幕快照,其中顯示所有網站都是近端內部網路區域的一部分。

  • 伺服器

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

  • 驗證設定

    Windows 驗證已啟用

    網際網路資訊服務 管理員視窗的螢幕快照,其中顯示 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 查詢傳送至慣用的 DNS 伺服器(在 IP 組態設定上設定),這也是環境中的域控制器。
  3. 在域控制器上執行的 DNS 服務會查看其設定的區域、解析主機 A 記錄,並使用 IP 位址 IISServer.contoso.com 回應 (上圖中的步驟 2)。
  4. 用戶端電腦會在 TCP 連接埠 80 上執行 TCP 三向交握至 IISServer.contoso.com
  5. 用戶端電腦會將匿名 HTTP 要求傳送至 IISServer.contoso.com
  6. 在埠 80 上接聽的 IIS 伺服器會收到 要求 Client1.contoso.com,查看 IIS 伺服器驗證組態,並將 HTTP 401 挑戰回應傳回給用戶端電腦,並搭配交涉作為驗證組態(上圖中的步驟 3)。
  7. 在上 Client1.contoso.com 執行的 Microsoft Edge 進程會知道 IIS 伺服器已設定交涉,且會驗證網站是否為近端內部網路區域的一部分。 如果網站位於本機內部網路區域,則Microsoft Edge 程式會呼叫 LSASS.exe ,以取得具有SPN HTTP\IISServer.contoso.com 的 Kerberos 票證(上圖中的步驟 5)。
  8. 域控制器 (KDC 服務) 會從 Client1.contoso.com接收要求,並搜尋其資料庫的SPN,並尋找IISServer.contoso.com已使用此SPN HTTP\IISServer.contoso.com 進行設定。
  9. 域控制器會以具有 IIS 伺服器票證的 TGS 回應來回應 (上圖中的步驟 6)。
  10. 用戶端電腦上的Microsoft Edge 程式將會使用域控制器發出的 Kerberos TGS 票證,將 Kerberos 應用程式通訊協定 (AP) 要求傳送給 IIS 網頁伺服器。
  11. IIS 程式會呼叫 網頁伺服器上的 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 伺服器上的事件識別碼 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 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.comClient1.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
      

      您會發現您會在資料行中Cached Ticket (2)取得SPN http/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$) 上讀取的許可權。

      1. 登入 Client1.contoso.com

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

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

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

      5. 以使用者 John身分開啟的一般命令提示字元Client1.contoso.comklist 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網路追蹤。 檢閱網路追蹤以觀察哪個步驟失敗,以便進一步縮小步驟範圍,並針對問題進行疑難解答。