从 Active Directory 中检索当前 Kerberos KVNO

从 Active Directory 中检索当前 Kerberos KVNO

我在 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 要求的方式实现。

https://docs.microsoft.com/en-us/archive/blogs/openspecification/to-kvno-or-not-to-kvno-what-is-the-version

不,Windows 不关注 KVNO。它只是忽略它。

但在 RODC 环境中,KVNO 确实具有一定意义:

https://docs.microsoft.com/en-us/archive/blogs/openspecification/notes-on-kerberos-kvno-in-windows-rodc-environment

更多信息请见此处: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

代替主机名使用您的主机名。

相关内容