我在 Linux 主机连接到 Windows KDC 时遇到了 Kerberos 问题。我怀疑是 Kerberos 密钥版本错误导致的。
一种确定的方法是删除 SPN 并重新创建,但这是在生产环境中,如果您愿意的话,我必须以“只读”方式进行调试。
如何从 Active Directory 中的主体检索当前 Kerberos KVNO?
答案1
我不确定 KVNO 是否与您的问题有关,好吧,也许与 Linux 客户端有关,但无论如何,请使用 Wireshark/Network Monitor:
密钥版本号在 MS-KILE 第 3.1.5.8 节中描述。
顺便说一句,Mathias R. Jessen 的说法是正确的,Windows 通常会忽略 KVNO。但它们仍以符合 RFC 要求的方式实现。
不,Windows 不关注 KVNO。它只是忽略它。
但在 RODC 环境中,KVNO 确实具有一定意义:
更多信息请见此处:https://web.archive.org/web/20150204183217/http://support.microsoft.com/kb/2716037
在具有一个或多个 RODC 的环境中,在以下场景之一中与某些基于 MIT 的 Kerberos 设备交互时身份验证可能会失败。
· 客户端是 MIT 设备,从 RODC 上的 Windows KDC 接收 TGT
· 客户端将 RODC 上的 Windows KDC 生成的 TGT 传递给 MIT 设备,后者又使用该 TGT 代表调用用户请求 TGS。
在这两种情况下,TGT 都将由 RODC 颁发,其中 msDS-辅助密钥对编号与该 RODC 的 krbtgt 帐户关联的值将大于 32767。
答案2
使用 PowerShell 的 AD Cmdlet 可以查询 kvno:
PS> import-module ActiveDirectory
^^^ if this fails, find a Windows server where it is installed
PS> get-aduser <username> -property msDS-KeyVersionNumber
答案3
dsquery * -filter sAMAccountName=Accountname -attr msDS-KeyVersionNumber
答案4
从已加入 AD 的 Linux 服务器进行查询:
net ads search -P '(&(objectCategory=computer)(cn=HOSTNAME))' msDS-KeyVersionNumber
代替主机名使用您的主机名。