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

Y. *_*ark 6 domain kerberos smartcard windows-server-2012 windows-10

我的 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 对此进行了测试,并且在AS_REQ -> KDC_ERR_PREAUTH_REQ -> AS_REQ -> AS_REP.

毕竟,我还没有能够吐出不同的错误,所以我实际上被卡住了。我试图将 Windows 10 机器上的时间更改为比 DC 早几个小时,并且 DC 正确报告说由于时间偏差它无法加入,我预计会发生这种情况,所以我知道有某种通信正在进行在。我可以通过它的 FQDN nslookup/ping DC,但我无法仅使用它的名称来 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
Run Code Online (Sandbox Code Playgroud)

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

(cli)AS-REQ
(srv)KRB Error: KRB5KDC_ERR_PREAUTH_REQUIRED
(cli)AS-REQ
(srv)AS-REP
Run Code Online (Sandbox Code Playgroud)

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

Gre*_*kew 1

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

\n\n

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

\n\n

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

\n\n

“严格的 KDC 验证是一组更具限制性的标准,可确保满足以下所有条件:

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

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

  • \n
  • 对于未加入域的系统,KDC\xe2\x80\x99s 证书的根 CA 位于第三方根 CA 或智能卡可信根存储中。

  • \n
  • KDC\xe2\x80\x99s 证书具有 KDC EKU。

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

  • \n
\n\n

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

\n\n

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

\n\n
\n\n

更多信息:

\n\n

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

\n\n

严格 KDC 验证默认更改

\n\n

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

\n\n

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

\n