联合身份验证服务解决Windows登录问题

本文描述了当用户使用证书和/或智能卡登录时,Windows提供的日志和错误消息。这些日志提供的信息可用于排除身份验证失败的问题。

证书和公钥基础设施

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

  • NTAuth证书存储:要向Windows进行身份验证,必须将立即颁发用户证书的CA(即,不支持链接)放置在NTAuth存储中。要查看这些证书,请在certutil程序中输入:certutil–viewstore–enterprise NTAuth。
  • 根证书和中间证书存储:通常,证书登录系统只能提供一个证书,因此如果使用链,则所有计算机上的中间证书存储必须包括这些证书。根证书必须位于受信任的根存储中,倒数第二个证书必须位于NTAuth存储中。
  • 登录证书扩展名和组策略:可以将Windows配置为强制验证EKU和其他证书策略。请参阅Microsoft文档:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/ff404287(v=ws.10)?重定向自=MSDN
注册中心政策 描述
AllowCertificatesWithNoEKU 当禁用时,证书必须包括智能卡登录扩展密钥使用(EKU)。
AllowSignatureOnlyKeys 默认情况下,Windows会过滤掉不允许RSA解密的证书私钥。此选项将覆盖该过滤器。
AllowTimeInvalidCertificates 默认情况下,Windows会过滤过期的证书。此选项将覆盖该过滤器。
列举证书 启用椭圆曲线认证。
X509HintsNeeded 如果证书不包含唯一的用户主体名(User Principal Name, UPN),或者可能不明确,则此选项允许用户手动指定其Windows登录帐户。
UseCachedCrOnly和IgnoreRevocation未知错误 域控制器上的设置(通常禁用吊销)。
  • 域控制器的证书:要验证Kerberos连接,所有服务器必须具有适当的“域控制器”证书。可以使用“本地计算机证书个人存储”MMC管理单元菜单请求这些证书。

UPN名称和证书映射

建议用户证书在“主题替代名”扩展名中包含唯一的用户主体名(UPN)。

Active Directory中的UPN名称

默认情况下,Active Directory中的每个用户都有一个基于模式@@的隐式UPN。可用域和fqdn包含在林中的RootDSE条目中。注意,单个域可以在RootDSE中注册多个FQDN地址。

此外,Active Directory中的每个用户都有一个显式的UPN和altUserPrincipalNames。这些是为用户指定UPN的LDAP条目。

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

证书映射服务

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

为用户提供了一个选项,可以指定一个用户帐户来加快搜索速度,并允许在跨域环境中使用该特性。

如果林中有多个域,且用户没有显式指定域,则Active Directory rootDSE将指定证书映射服务的位置。它通常位于全局编录机器上,并具有林中所有x509certificate属性的缓存视图。这台计算机可以用来有效地查找任何域的用户帐户,只基于证书。

控制登录域控制器选择

当一个环境包含多个域控制器时,查看和限制用于身份验证的域控制器非常有用,这样可以启用和检索日志。

控制域控制器选择

要强制Windows使用特定的Windows域控制器登录,可以通过配置lmhosts文件显式地设置Windows机器使用的域控制器列表:\Windows\System32\drivers\etc\lmhosts。

通常有一个名为“lmhosts”的示例文件。山姆,在那个地方。简单地包括一行:

1.2.3.4 dcnetbiosname#PRE#DOM:mydomai

其中“1.2.3.4”为“mydomain”域控制器“dcnetbiosname”的IP地址。

重新启动后,Windows机器使用这些信息登录到mydomain。注意,当调试完成时,必须恢复此配置。

标识正在使用的域控制器

在登录时,Windows使用登录用户的域控制器设置MSDOS环境变量。要看到这一点,使用以下命令启动命令提示符:回声% LOGONSERVER %

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

启用帐户审核事件

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

局部的图片

证书验证日志

检查证书的有效性

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

启用CAPI日志记录

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

你可以通过注册表项控制CAPI日志:CurrentControlSet\Services\crypt32。

价值 描述
诊断级别(DWORD) 详细级别(0到5)
DiagMatchAnyMask(四字) 事件过滤器(使用0xffffff为所有)
DiagProcessName (MULTI_SZ) 按进程名称筛选(例如,LSASS.exe)

卡皮原木

消息 描述
建立链 LSA称为CertGetCertificateChain(包括结果)
验证撤销 称为CertVerifyRevocation的LSA(包括结果)
X509对象 在verbose模式下,证书和证书撤销列表(crl)被转储到AppData\LocalLow\Microsoft\X509Objects
验证链政策 称为CertVerifyChainPolicy的LSA(包括参数)

错误消息

错误代码 描述
证书不可信 不能使用计算机的中间和受信任的根证书存储库中的证书构建智能卡证书。
证书撤销检查错误 无法从证书CRL分发点指定的地址下载智能卡的CRL。如果强制执行吊销检查,则会阻止登录成功。见证书和公钥基础设施部分。
证书使用错误 该证书不适合登录。例如,它可能是服务器证书或签名证书。

Kerberos日志

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

蜂箱 值名称 价值(字)
CurrentControlSet\Control\Lsa\Kerberos\Parameters LogLevel 0x1
CurrentControlSet\Control\Lsa\Kerberos\Parameters KerbDebuglevel 0 xffffffff
CurrentControlSet \ \ Kdc服务 KdcDebugLevel 0x1
CurrentControlSet \ \ Kdc服务 KdcExtraLogLevel 0 x1f

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

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

事件日志消息

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

  • 域控制器CAPI2日志
  • 域控制器安全日志
  • VDA安全日志
  • VDA CAPI日志
  • VDA系统日志

域控制器CAPI2日志

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

局部的图片

最后一条事件日志消息显示域控制器上的lsass.exe根据VDA提供的证书构造链,并验证其有效性(包括吊销)。结果返回为“错误\成功”。

局部的图片

域控制器安全日志

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

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

局部的图片

VDA安全日志

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

局部的图片

VDA CAPI日志

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

局部的图片

局部的图片

VDA系统日志

当启用Kerberos日志记录时,系统日志显示错误KDC_ERR_PREAUTH_REQUIRED(可以忽略),以及Winlogon中的一个条目,显示Kerberos登录成功。

局部的图片

最终用户错误消息

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

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