使用智能卡在 Windows 10 上加入 AD 域

使用智能卡在 Windows 10 上加入 AD 域

我的 Windows“以域为中心”的公司突然决定从 Windows 7 切换到 Windows 10,而我的工作就是让他们准备好的映像通过基于智能卡/令牌的身份验证系统加入我们的域。这是 Windows 7 的问题,但是,通过构建证书信任链可以轻松解决。我并不负责在 Windows 7 上完全设置它,所以我不确定整个 Kerberos 过程的内部工作原理。

然而,对于 Windows 10 来说,这简直是一场噩梦。我已经将整个过程从 7 镜像到 10,包括所有缺失的证书(我们使用 netdom 通过命令行添加,使用 /securepasswordprompt),但无论我做什么,我的计算机都不会使用智能卡加入域。他们使用用户名/密码(没有 2FA)毫无问题地添加,但使用智能卡时,我收到以下错误:

The KDC certificate for the domain controller does not contain the KDC Extended Key Usage (EKU): 1.3.6.1.5.2.3.5: Error Code 0xc0000320. The domain administrator will need to obtain a certificate with the KDC EKU for the domain controller to resolve this error. When using Windows Server Certificate Services create a certificated based on the Kerberos Authentication Template.

我的理解是,这个特定的 OID 用于服务器身份验证,我添加到计算机帐户的根证书和 CA 证书都分配了正确的用途。我直接进入了域中的 CA 服务器并获取了根证书以及我没有的 CRL,但错误仍然相同。今天,我进行了更多阅读并启用了 kerberos 调试注册表项,在尝试再次添加后,DC 返回了KDC_ERR_ETYPE_NOTSUPP

这让我开始研究两台机器之间使用的加密方法,Windows 7 启用了 RC4、AES128/256,而 Windows 10 只启用了 AES128/256 和“未来类型”。当然,我打开了 RC4,这样两台机器之间就会保持一致,然后我发现事件日志中出现了一个新错误:KDC_ERR_PREAUTH_REQUIRED——这让我相信加密方法现在正在协同工作。

在网上阅读后,我发现这个KDC_ERR_PREAUTH_REQUIRED错误通常只是一个警告,或者是“误报”,可以忽略(一旦机器在域中)。在加入域之前,此错误表示用户输入了错误的密码(我确信我的智能卡使用了正确的 PIN),或者机器和 DC 之间的加密密钥配置错误。我也在Kerberos pre-authentication requiredAD 中禁用了我的帐户,但是当我尝试添加机器时,它出错了smartcard logon is required and was not used。我用 Wireshark 测试了这一点,我在 4 帧中收到了相同的错误,顺序为AS_REQ -> KDC_ERR_PREAUTH_REQ -> AS_REQ -> AS_REP

经过所有这些,我还是无法产生不同的错误,所以我实际上陷入了困境。我试图将 Windows 10 机器上的时间更改为比 DC 早几个小时,而 DC 正确地报告说由于时间偏差而无法加入,这是我预料到会发生的,所以我知道正在进行某种通信。我能够通过 DC 的 FQDN 对其进行 nslookup/ping,但无法仅使用它的名称对其进行 ping。我可以使用其他方法来调查此问题吗?或者有人以前遇到过这种情况吗?

更新:变成。PREAUTH_FAILEDPREAUTH_REQUIRED

更新2:

将 Windows 7 机器加入域后进行 Wireshark 捕获,我看到以下初始模式结果(客户端的 cli 和服务器的 srv):

(cli)AS-REQ
(srv)AS-REP
(cli)TGS-REQ
(srv)TGS-REP
(cli)TGS-REQ
(srv)TGS-REP

上面的日志中还有更多内容,但这是第一部分不同之处。相比之下,在 Windows 10 计算机上,我看到:

(cli)AS-REQ
(srv)KRB Error: KRB5KDC_ERR_PREAUTH_REQUIRED
(cli)AS-REQ
(srv)AS-REP

... 日志就此停止,事件日志中出现故障。我读过一篇文章,讨论了如何修改Security Packages下的注册表项HKLM\SYSTEM\CurrentControlSet\Control\LSA,使其具有kerberos msv1_0 schannel wdigest tspkg pku2u,这就是我的 Windows 7 机器所具有的。Windows 10 机器只有两个引号,即""。不过,添加这个似乎没有帮助。

答案1

我们遇到了同样的问题,并通过重新颁发具有所需 KDC EKU 的域控制器证书解决了该问题。我们的域控制器证书现在有四个 EKU:客户端、服务器、KDC 和智能卡。我们还必须调整域控制器证书的 SAN。

如果您不想这样做,您可能需要尝试禁用客户端上的“需要严格的 KDC 验证”设置,看看是否有帮助。这似乎是一个与 Windows 7 相比没有太多记录的行为变化,或者至少它与组策略设置电子表格/文档中记录的设置不一致。

https://technet.microsoft.com/en-us/library/hh831747.aspx

“严格的 KDC 验证是一组更严格的标准,可确保满足以下所有要求:

  • 域控制器拥有所提供证书的私钥。

  • 对于加入域的系统,颁发 KDC 证书的证书颁发机构 (CA) 位于 NTAuth 存储中。

  • 对于未加入域的系统,KDC 证书的根 CA 位于第三方根 CA 或智能卡受信任根存储中。

  • KDC 的证书有 KDC EKU。

  • KDC 证书的 subjectAltName(SAN)扩展的 DNSName 字段与域的 DNS 名称匹配。

对于非域加入的智能卡登录,需要严格的 KDC 验证。

要禁用此默认行为,请禁用组策略设置“要求严格的 KDC 验证”。


更多信息:

Kerberos 身份验证的新增功能
https://technet.microsoft.com/en-us/library/hh831747(v=ws.11).aspx

严格 KDC 验证默认更改

“对于非域加入的智能卡登录,需要严格的 KDC 验证。

“要禁用此默认行为,请禁用组策略设置“要求严格的 KDC 验证”。

相关内容