![使用智能卡在 Windows 10 上加入 AD 域](https://linux22.com/image/680210/%E4%BD%BF%E7%94%A8%E6%99%BA%E8%83%BD%E5%8D%A1%E5%9C%A8%20Windows%2010%20%E4%B8%8A%E5%8A%A0%E5%85%A5%20AD%20%E5%9F%9F.png)
我的 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 required
AD 中禁用了我的帐户,但是当我尝试添加机器时,它出错了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_FAILED
PREAUTH_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 验证”。