联合身份验证服务排查 Windows 登录问题

本文介绍用户使用证书和/或智能卡登录时 Windows 提供的日志和错误消息。这些日志提供可用于排查身份验证失败的信息。

数字证书和公钥基础设施

Windows Active Directory 维护多个证书存储,用于管理登录用户的证书。

  • NTAuth 证书存储:要向 Windows 进行身份验证,直接颁发用户证书(即不支持链式)的 CA 必须放置在 NTAuth 存储中。要查看这些证书,请在 certutil 程序中输入:certutil –viewstore –enterprise NTAuth。
  • 根证书和中间证书存储:通常,证书登录系统只能提供单个证书,因此如果使用证书链,则所有计算机上的中间证书存储都必须包含这些证书。根证书必须位于受信任的根存储中,倒数第二个证书必须位于 NTAuth 存储中。
  • 登录证书扩展和组策略:Windows 可以配置为强制验证 EKU 和其他证书策略。请参阅 Microsoft 文档:https://docs.microsoft.com/zh-cn/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/ff404287(v=ws.10)?redirectedfrom=MSDN
注册表策略 说明
允许没有 EKU 的证书 禁用时,证书必须包含智能卡登录扩展密钥用法 (EKU)。
允许仅用于签名的密钥 默认情况下,Windows 会筛选出不允许 RSA 解密的证书私钥。此选项会覆盖该筛选器。
允许时间无效的证书 默认情况下,Windows 会筛选出已过期的证书。此选项会覆盖该筛选器。
枚举 ECC 证书 启用椭圆曲线身份验证。
X509 提示需求 如果证书不包含唯一的用户主体名称 (UPN),或者可能存在歧义,此选项允许用户手动指定其 Windows 登录帐户。
仅使用缓存的CRL并, 忽略吊销未知错误 禁用吊销检查(通常在域控制器上设置)。
  • 域控制器证书:为了验证 Kerberos 连接,所有服务器都必须具有相应的“域控制器”证书。可以使用“本地计算机证书个人存储”MMC 管理单元菜单请求这些证书。

UPN 名称和证书映射

建议用户证书在主题备用名称扩展中包含唯一的用户主体名称 (UPN)。

活动目录中的 UPN 名称

默认情况下,活动目录中的每个用户都具有基于模式 <samUsername>@<domainNetBios> 和 <samUsername>@<domainFQDN> 的隐式 UPN。可用的域和 FQDN 包含在林的 RootDSE 条目中。请注意,单个域可以在 RootDSE 中注册多个 FQDN 地址。

此外,活动目录中的每个用户都具有显式 UPN 和 altUserPrincipalNames。这些是指定用户 UPN 的 LDAP 条目。

当按 UPN 搜索用户时,Windows 首先在当前域(基于查找 UPN 的进程的身份)中查找显式 UPN,然后查找备用 UPN。如果没有匹配项,它会查找隐式 UPN,这可能会解析到林中的不同域。

证书映射服务功能

如果证书不包含显式 UPN,Active Directory 可以选择在“x509certificate”属性中为每个用途存储一个精确的公共证书。要将此类证书解析为用户,计算机可以直接查询此属性(默认情况下,在单个域中)。

提供了一个选项,允许用户指定一个用户帐户,以加快此搜索速度,并允许在跨域环境中使用此功能。

如果林中存在多个域,并且用户未明确指定域,则 Active Directory rootDSE 会指定证书映射服务的位置。该服务通常位于全局编录计算机上,并具有林中所有 x509certificate 属性的缓存视图。此计算机可用于仅根据证书在任何域中高效查找用户帐户。

管理登录域控制器的选择

当环境中包含多个域控制器时,能够查看并限制用于身份验证的域控制器是很有用的,这样就可以启用并检索日志。

管理域控制器的选择

要强制 Windows 使用特定的 Windows 域控制器进行登录,可以通过配置 lmhosts 文件(\Windows\System32\drivers\etc\lmhosts)来显式设置 Windows 计算机使用的域控制器列表。

该位置通常有一个名为“lmhosts.sam”的示例文件。只需包含一行:

1.2.3.4 dcnetbiosname #PRE #DOM:mydomai

其中,“1.2.3.4”代表的是在“mydomain”域内,名称为“dcnetbiosname”的域控制器的 IP 地址。

重新启动后,Windows 计算机将使用该信息登录到 mydomain。请注意,调试完成后必须还原此配置。

识别正在使用的域控制器

登录时,Windows 会设置一个 MSDOS 环境变量,其中包含登录用户的域控制器。要查看此信息,请使用命令:echo %LOGONSERVER% 启动命令提示符。

与身份验证相关的日志存储在此命令返回的计算机上。

启用帐户审核事件

默认情况下,Windows 域控制器不启用完整的帐户审核日志。这可以通过组策略编辑器中安全设置中的审核策略进行控制。启用后,域控制器会在安全日志文件中生成额外的事件日志信息。

本地化图像

证书验证日志记录

检查证书有效性

如果智能卡证书导出为 DER 证书(无需私钥),您可以使用以下命令对其进行验证:certutil –verify user.cer

启用 CAPI 日志记录

在域控制器和用户计算机上,打开事件查看器并为 Microsoft/Windows/CAPI2/Operational Logs 启用日志记录。

您可以通过修改位于以下路径的注册表项来控制 CAPI 的日志记录功能:CurrentControlSet\Services\crypt32。

描述
诊断级别 (DWORD) 详细级别 (0 到 5)
诊断匹配任意掩码 (QUADWORD) 事件筛选器 (使用 0xffffff 表示全部)
诊断进程名称 (MULTI_SZ) 按进程名称筛选(例如,LSASS.exe)

CAPI 相关的日志

消息 描述
构建链 本地安全机构调用了 CertGetCertificateChain 函数,并记录了其结果。
验证吊销状态 本地安全机构调用了 CertVerifyRevocation 函数,并记录了其结果。
X509 对象 在详细模式下,系统会将证书和证书吊销列表 (CRL) 转储到以下路径:AppData\LocalLow\Microsoft\X509Objects
验证链策略 本地安全机构 (LSA) 调用了 CertVerifyChainPolicy 函数,该函数包含参数。

错误消息

错误代码 描述
证书不受信任 智能卡证书无法通过使用计算机的中间和受信任的根证书存储中的证书来构建。
证书吊销检查时发生错误 无法从证书 CRL 分发点指定的地址下载智能卡的 CRL。如果强制执行吊销检查,这将阻止登录成功。请参阅 (/zh-cn/xenapp-and-xendesktop/7-15-ltsr/secure/federated-authentication-service/fas-config-manage/fas-troubleshoot-logon.html#certificates-and-public-key-infrastructure) 部分中的“证书和公钥基础结构”。
证书使用错误 此证书不适合用于登录。例如,它可能是一个服务器证书或签名证书。

克贝罗斯日志

要启用 Kerberos 日志记录,请在域控制器和最终用户计算机上创建以下注册表值:

配置单元 值名称 值 [双字]
当前控制集\控制\Lsa\Kerberos\参数 日志级别 0x1
当前控制集\控制\Lsa\Kerberos\参数 Kerb 调试级别 0xffffffff
CurrentControlSet\Services\Kdc KDC调试级别 0x1
CurrentControlSet\Services\Kdc KDC额外日志级别 0x1f

Kerberos 日志记录输出到系统事件日志。

  • 诸如“不受信任的证书”之类的消息应该很容易诊断。
  • 两个错误代码是信息性的,可以安全忽略:
    • KDC_ERR_PREAUTH_REQUIRED (用于与旧域控制器实现向后兼容)
    • 未知错误 0x4b

事件日志消息

本节描述了当用户使用证书登录时,域控制器和工作站上预期的日志条目。

  • 域控制器 CAPI2 日志
  • 域控制器安全日志
  • VDA 安全日志
  • 虚拟投递代理 CAPI 日志
  • VDA 系统日志

域控制器 CAPI2 日志

在登录期间,域控制器会验证调用者的证书,并生成以下形式的日志条目序列。

本地化图像

最终的事件日志消息显示,域控制器上的 lsass.exe 根据 VDA 提供的证书构建了一个链,并验证了其有效性(包括吊销)。结果以“ERROR_SUCCESS”返回。

本地化图像

域控制器安全日志

域控制器显示一系列登录事件,关键事件是 4768,其中证书用于颁发 Kerberos 票证授予票证 (krbtgt)。

此之前的消息显示服务器的计算机帐户正在向域控制器进行身份验证。此之后的消息显示属于新 krbtgt 的用户帐户正在用于向域控制器进行身份验证。

本地化图像

VDA 安全日志

与登录事件对应的 VDA 安全审核日志是事件 ID 为 4648 的条目,它源自 winlogon.exe。

本地化图像(/zh-cn/xenapp-and-xendesktop/7-15-ltsr/media/fas-troubleshoot-logon-vda-security-log.png)

VDA CAPI log

此 VDA CAPI 日志示例显示了来自 lsass.exe 的单个链构建和验证序列,用于验证域控制器证书 (dc.citrixtest.net)。

本地化图像(/zh-cn/xenapp-and-xendesktop/7-15-ltsr/media/fas-troubleshoot-logon-capi-log.png)

本地化图像(/zh-cn/xenapp-and-xendesktop/7-15-ltsr/media/fas-troubleshoot-logon-capi-chainpolicy.png)

VDA 系统日志

启用 Kerberos 日志记录后,系统日志会显示错误 KDC_ERR_PREAUTH_REQUIRED(可以忽略),以及来自 Winlogon 的条目,表明 Kerberos 登录成功。

本地化图像(/zh-cn/xenapp-and-xendesktop/7-15-ltsr/media/fas-troubleshoot-logon-vda-system-log.png)

最终用户错误消息

本节列出了在 Windows 登录页面上向用户显示的常见错误消息。

显示的错误消息 描述和参考
无效的用户名或密码 计算机认为您拥有有效的证书和私钥,但 Kerberos 域控制器拒绝了连接。请参阅本文的“Kerberos 日志”部分。
系统无法将您登录。您的凭据无法验证。 无法联系到域控制器,或者该域控制器上没有正确安装适当的证书。
该请求不受支持。 按照 CTX206156 中的说明,在域控制器上重新注册“域控制器”和“域控制器身份验证”证书。即使现有证书看起来有效,通常也值得尝试此操作。
系统无法将您登录。用于身份验证的智能卡证书不受信任。 本地计算机上未安装中间证书和根证书。有关在未加入域的计算机上安装智能卡证书的说明,请参阅 CTX206156。另请参阅本文中的证书和公钥基础结构部分。
无法登录,因为您的帐户不支持智能卡登录。 工作组用户帐户尚未完全配置为智能卡登录。
请求的密钥不存在 证书引用了不可访问的私钥。当 PIV 卡未完全配置且缺少 CHUID 或 CCC 文件时,可能会发生这种情况。
在使用智能卡时发生了错误。 智能卡中间件未正确安装。有关智能卡安装说明,请参阅 CTX206156。
插入智能卡 未检测到智能卡或读卡器。如果已插入智能卡,则此消息表示硬件或中间件问题。有关智能卡安装说明,请参阅 CTX206156。
PIN 不正确 智能卡拒绝了用户输入的 PIN。
找不到有效的智能卡证书。 证书上的扩展可能未正确设置,或者 RSA 密钥太短(<2048 位)。有关生成有效智能卡证书的信息,请参阅 CTX206901。
智能卡已被阻止 智能卡已被锁定(例如,用户多次输入错误的 PIN)。管理员可能拥有该卡的 PIN 解锁 (PUK) 码,并且可以使用智能卡供应商提供的工具重置用户 PIN。如果 PUK 码不可用或已锁定,则必须将卡重置为出厂设置。
错误请求 智能卡私钥不支持域控制器所需的加密。例如,域控制器可能请求了“私钥解密”,但智能卡仅支持签名。这通常表示证书上的扩展未正确设置,或者 RSA 密钥太短(<2048 位)。有关生成有效智能卡证书的信息,请参阅 CTX206901。

相关的信息