本指南提供排查 Kerberos 身份验证问题时使用的基本概念。

故障排除清单

  • 与 Kerberos 相关的错误是另一个服务失败的症状。 Kerberos 协议依赖于许多服务,这些服务必须可用并正常运行才能进行任何身份验证。

  • 若要确定 Kerberos 身份验证是否出现问题,请在系统事件日志中检查来自提供身份验证的客户端、目标服务器或域控制器上任何服务 (错误,例如 Kerberos、kdc、LsaSrv 或 Netlogon) 。 如果存在任何此类错误,也可能存在与 Kerberos 协议关联的错误。

  • 对目标服务器的安全事件日志的失败审核可能会显示,登录失败时正在使用 Kerberos 协议。

  • 在检查 Kerberos 协议之前,请确保以下服务或条件正常运行:

    • 网络基础结构正常运行,并且所有计算机和服务都可以通信。

    • 域控制器是可访问的。 例如,可以在客户端或目标服务器上) (nltest /dsgetdc:contoso.com /force /kdc 运行命令nltest /dsgetdc:<Domain Name> /force /kdc

    • 域名系统 (DNS) 已正确配置并正确解析主机名和服务。

    • 时钟跨域同步。

    • 已安装 Windows Server 的所有关键更新和安全更新。

    • 所有软件(包括非 Microsoft 软件)都会更新。

    • 如果运行的是服务器操作系统,则计算机会重启。

    • 所需的服务和服务器可用。 Kerberos 身份验证协议需要正常运行的域控制器、DNS 基础结构和网络才能正常工作。 在开始排查 Kerberos 协议问题之前,请验证是否可以访问这些资源。

如果已检查所有这些条件,但仍遇到身份验证问题或 Kerberos 错误,则需要进一步寻找解决方案。 这些问题可能是由 Kerberos 协议的配置方式或与 Kerberos 协议配合使用的其他技术配置方式引起的。

常见问题和解决方案

Kerberos 委派问题

在典型方案中,模拟帐户是分配给 Web 应用程序的服务帐户或 Web 服务器的计算机帐户。 模拟帐户是需要通过 Web 应用程序访问资源的用户帐户。

使用 Kerberos 的委派有三种类型:

  • 完全委派 (不受约束的委派)

    应尽可能避免完全委派。 (前端用户和后端用户的用户) 可以位于不同的域和不同的林中。

  • 仅限 Kerberos (约束委派和协议转换)

    用户可以来自任何域或林,但前端和后端服务应在同一域中运行。

  • 基于资源的约束委派 (RBCD)

    用户可以来自任何域,前端和后端资源可以来自任何域或林。

最常见的 Kerberos 委派故障排除

  • 服务主体名称缺失或重复

  • 为服务器) 提供的名称解析失败或错误响应 (错误的 IP 地址

  • 大型 Kerberos 票证 (MaxTokenSize) 和环境未正确设置

  • 防火墙或路由器阻止的端口

  • 服务帐户未 (用户权限分配)

  • 前端或后端服务不在同一域和约束委派设置中

有关更多信息,请参阅:

单一登录 (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 选项) ,所有基于 HTTP 的应用程序都将其用于 Internet Explorer 配置,并查看网站是否配置为 本地 Intranet

  • 应用程序还具有用于执行集成Windows 身份验证的配置。

    Microsoft Edge 或 Internet Explorer 具有要启用 的“启用集成 Windows 身份验证” 设置。

  • 查看应用程序配置,客户端计算机可以获取给定服务主体名称的 Kerberos 票证 (SPN) 。 在此示例中,SPN 为 http/webserver.contoso.com

    标识相应的 SPN 并将其添加到相应的用户、服务或计算机帐户。

    • 找到 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,则可以使用以下命令验证它们是否已在正确的帐户上注册:

    控制台

    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 选项

    所有网站都是本地 Intranet 区域的一部分。

    Internet 属性的屏幕截图,其中显示所有网站都是本地 Intranet 区域的一部分。

  • 服务器

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

  • 身份验证配置

    Windows 身份验证已启用

    Internet Information Services Manager 窗口的屏幕截图,其中显示了“已启用 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 记录,并使用上图) 中步骤 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 质询响应发回客户端计算机(将 Negotiate 作为身份验证配置 (上图中的步骤 3) )。

  7. 在 上运行 Client1.contoso.com 的 Microsoft Edge 进程将知道 IIS 服务器配置了 Negotiate,并将验证网站是否是本地 Intranet 区域的一部分。 如果网站位于本地 Intranet 区域,则 Microsoft Edge 进程将调用 LSASS.exe ,以获取具有 SPN HTTP\IISServer.contoso.com (上图步骤 5) 的 Kerberos 票证。

  8. 域控制器 (KDC 服务) 将接收来自 Client1.contoso.com的请求,在其数据库中搜索 SPN HTTP\IISServer.contoso.com 并查找 IISServer.contoso.com 配置了此 SPN。

  9. 域控制器将使用 IIS 服务器票证 (上图) 中的步骤 6 的 TGS 响应进行响应。

  10. 客户端计算机上的 Microsoft Edge 进程将使用域控制器颁发的 Kerberos TGS 票证向 IIS Web 服务器发送 Kerberos 应用程序协议 (AP) 请求。

  11. IIS 进程将调用 Web 服务器上的 LSASS.exe ,以解密票证,并创建具有 SessionID 和用户组成员身份的令牌进行授权。

  12. IIS 进程将从 LSASS.exe 获取令牌的句柄,以做出授权决策并允许用户与 AP 响应进行连接。

工作流的网络监视器分析

 备注

你需要是本地管理员组的用户才能执行以下活动。

  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 Web 服务器 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. 来自 Client1.contoso.com 的 Kerberos 请求将转到带有 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
    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 服务器上的事件 ID 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 上的成功安全事件 ID 4624

观察以下字段:

  • Logon type:3 (网络登录)

  • Security ID in New Logon field: 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 Web 服务器的名称, (IISServer.contoso.com 从 Client1.contoso.com) 。

  • 使用以下 cmdlet 验证 DNS 服务器是否响应正确的 IIS 服务器 IP 地址:

    PowerShell

    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 Web 服务器之间打开网络端口, (IISServer.contoso.com) :

    PowerShell

    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 提示符) 。

    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 Explorer。

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

    4. 打开安全 IISServer.contoso.com 事件并验证是否观察到事件 ID 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网络跟踪。 查看网络跟踪,观察哪个步骤失败,以便进一步缩小步骤范围并排查问题。