我的Windows“以域为中心”的公司已经突然决定从Windows 7切换到Windows 10,而我们的工作就是使我们的准备好的映像join我们的基于智能卡/令牌的身份validation系统。 这对于Windows 7来说是一个问题,但是,通过构build证书信任链可以很容易地解决这个问题。 我并不负责在Windows 7上完全设置它,所以我不确定整个Kerberos进程的内部工作情况。
但对于Windows 10来说,这是一场噩梦。 我已经把我的整个过程从7个镜像到10个,包括所有缺less的证书(我们使用netdom通过命令行添加/ securepasswordprompt),但是不pipe我做什么,我的电脑都不会用智能卡join域。 他们添加没有问题使用用户名/密码(没有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是用于服务器身份validation的,我已经添加到计算机帐户的根证书和CA证书都具有分配给他们的正确目的。 我直接去了域上的CA服务器,并获得了根证书以及我没有的CRL,但是错误依然存在。 今天,我做了更多的阅读并启用了kerberosdebuggingregistry项,在尝试再次添加之后,DC返回了KDC_ERR_ETYPE_NOTSUPP 。
这使我调查了两台机器之间使用的encryption方法,Windows 7启用了RC4,启用了AES128 / 256,而Windows 10只启用了AES128 / 256和“未来types”。 当然,我打开了RC4,所以这两台机器之间会保持一致,并且我发现自己在事件日志中有一个新的错误: KDC_ERR_PREAUTH_REQUIRED – 这使我相信encryption方法现在可以相互协作。
在线阅读,我发现这个KDC_ERR_PREAUTH_REQUIRED错误通常不是一个警告就是一个“误报”,可以忽略(一旦机器在域上)。 在join域之前,此错误表示用户input了错误的密码(我知道我的智能卡使用了正确的PIN),或者encryption密钥在机器和DC之间configuration错误。 我还在AD中禁用了我的帐户Kerberos pre-authentication required ,但是当我尝试添加机器时,它使用smartcard logon is required and was not used时出现错误, smartcard logon is required and was not used 。 我用Wiresharktesting了这个,并且在AS_REQ -> KDC_ERR_PREAUTH_REQ -> AS_REQ -> AS_REP的顺序上,我收到了4帧的相同错误。
毕竟,我没有能够做出不同的错误吐出来,所以我有效地卡住了。 我试图把Windows 10的机器上的时间改变到数小时前的数小时,而且数据中心正确地报告说,由于时间偏差,我预计会发生这种情况,因此我知道有某种通信正在进行上。 我能够通过它的FQDN查找/查找DC,而且我无法使用它的名字来ping它。 有没有其他方法可以用来调查这个问题,或者有没有人经历过这个?
更新: PREAUTH_FAILED PREAUTH_REQUIRED更改为PREAUTH_REQUIRED 。
UPDATE2:
在将Windows 7计算机join域之后执行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
…这就是日志停止的地方,在事件日志中失败。 我阅读了一篇文章,讨论修改HKLM\SYSTEM\CurrentControlSet\Control\LSA下的registry项Security Packages ,让我的Windows 7机器拥有kerberos msv1_0 schannel wdigest tspkg pku2u 。 Windows 10机器只有两个引号,如"" 。 不过,添加这个function似乎没有帮助。
我们遇到了同样的问题,并通过重新颁发具有所需KDC EKU的域控制器证书来解决此问题。 我们的域控制器证书现在有四个EKU:客户端,服务器,KDC和智能卡。 我们还必须调整SAN的域控制器证书。
如果您不想这样做,您可能需要尝试禁用客户端上的“需要严格的KDCvalidation”设置,以查看是否有帮助。 这似乎是从Windows 7行为的logging不太好logging,或者至less它不符合组策略设置电子表格/文档中logging的设置。
https://technet.microsoft.com/en-us/library/hh831747.aspx
“严格的KDCvalidation是一个更严格的标准,确保满足以下所有条件:
域控制器具有提供的证书的私钥。
对于join域的系统,颁发KDC证书的证书颁发机构(CA)位于NTAuth存储区中。
对于未join域的系统,KDC证书的根CA位于第三方根CA或智能卡可信根存储中。
KDC的证书有KDC EKU。
subjectAltName(SAN)扩展名的KDC证书的DNSName字段与域的DNS名称相匹配。
对于非域join的智能卡login,需要严格的KDCvalidation。
要禁用此默认行为,请禁用组策略设置Require strict KDC validation。
更多信息:
Kerberos身份validation中的新增function
https://technet.microsoft.com/en-us/library/hh831747(v=ws.11).aspx
严格的KDCvalidation默认更改
“对于非域join的智能卡login,需要严格的KDCvalidation。
“要禁用此默认行为,请禁用”组策略“设置”需要严格的KDCvalidation“。