首页 > 解决方案 > Windows AD 及其密钥选项卡文件

问题描述

我只有一个简单的问题。我有 Windows 活动目录。我已经使用命令从它创建了密钥选项卡文件:

ktpass /princ host/User1.contoso.com@CONTOSO.COM /mapuser User1 /pass MyPas$w0rd /out machine.keytab /crypto all /ptype KRB5_NT_PRINCIPAL /mapop set

现在根据我的理解,该文件由用户名及其加密格式的密码组成。当我将尝试使用此密钥表文件进行身份验证时,请求仅由该文件提供服务,或者这将进一步与 Windows AD 通信以进行身份​​验证。

我问的原因是因为我正在超时,并且我正在朝那个方向思考它是否与 AD 连接也是因为 AD 完全在不同的 VPC 中。

标签: linuxactive-directoryldapkerberoskeytab

解决方案


这里发生了一些事情。人们通常针对 HTTP、SSH 等实际服务进行身份验证,而不是 HOST。HOST 只是机器本身。

话虽如此,这里还有一些事情要做。您没有在密钥表中定义主机名 - 您在那里有一个用户名。 主持人/在这种情况下,应映射到 DNS 主机名,而不是用户名(在您的情况下为 User1.contoso.com)。以最简单的形式,Kerberos 旨在允许用户原则(像您这样的人,用户)对网络上的服务进行身份验证(这将在 KDC 和密钥表中表示为服务原则)。在更复杂的情况下,它是服务到服务,但我认为您在这里谈论的是用户到服务。我认为在这种情况下,Kerberos 会感到困惑并超时,因为 KDC 上不存在“host/User1.contoso.com”,或者您在 DNS 中没有名为 User1.constoso.com 的机器,或者两个都。您仍然可以将 Kerberos SPN 映射到User1,但HOST需要对应网络上的一台机器。而不是 host/User1.contoso.com@CONTOSO.COM,我会将 User1 替换为 Kerberos 将对其进行身份验证的实际计算机名称。例如,如果机器名为 Server1,请重新创建 keytab,如下所示。还请在创建密钥表时将 Kerberos 领域名称附加到服务原则;您在给出的示例中将其遗漏了。最后,Kerberos 服务应该大写,所以使用HOST而不是host。要解决这个问题:

  1. 从 User1 中删除 SPN,如下所示:

    setspn -D host/User1.contoso.com@CONTOSO.COM User1

  2. 像下面这样重新创建密钥表(我做了三处更改),然后再试一次:

    ktpass /princ HOST/server1.contoso.com@CONTOSO.COM /mapuser user1@CONTOSO.COM /pass MyPas$w0rd /out machine.keytab /crypto all /ptype KRB5_NT_PRINCIPAL /mapop set

注意:keytab从不与 AD 通信。它所做的是解密入站 Kerberos 服务票证以告知用户是谁。我在这里写了一篇关于这个机制的文章:https ://social.technet.microsoft.com/wiki/contents/articles/36470.active-directory-using-kerberos-keytabs-to-integrate-non-windows -系统.aspx


推荐阅读