我只有一个简单的问题。我有windows Active directory。我已经用命令创建了密钥标签文件:
ktpass /princ host/User1.contoso.com@CONTOSO.COM /mapuser User1 /pass MyPas$w0rd /out machine.keytab /crypto all /ptype KRB5_NT_PRINCIPAL /mapop set
现在,根据我的理解,这个文件由加密格式的用户名和密码组成。当我尝试使用此keytab文件进行身份验证时,请求仅由该文件提供,或者this将进一步与Windows AD通信以进行身份验证。
我之所以这么问,是因为我有时间了,我正朝着这个方向思考它是否与AD连接,也是因为AD完全在不同的VPC中。
这里发生了一些事情。人们通常根据HTTP、SSH等实际服务进行身份验证,而不是HOST。HOST只是机器本身。
话虽如此,这里还有一些事情在发生。您的keytab中没有定义主机名,而是有一个用户名HOST/在这种情况下,应该映射到DNS主机名,而不是用户名(在您的情况下,是User1.contoso.com(。在最简单的形式中,Kerberos旨在允许用户原则(像您这样的人,即用户(对网络上的服务进行身份验证(这将在KDC和keytab中表示为服务原则(。在更复杂的场景中,这是服务对服务,但我认为您在这里谈论的是用户对服务。我认为在这种情况下,Kerberos会变得混乱和超时,因为";host/User1.contoso.com";KDC上不存在,或者DNS中没有名为User1.constoso.com的计算机,或者两者都有。您仍然可以将Kerberos SPN映射到User1,但HOST需要与网络上的计算机相对应。而不是主机/User1.contoso.com@CONTOSO.COM,我会将User1替换为Kerberos将进行身份验证的实际计算机名。例如,如果计算机名为Server1,请重新创建keytab,如下所示。在创建keytab时,还请将Kerberos领域名称附加到服务原则中;你在举的例子中遗漏了它。最后,Kerberos服务应该用大写写,所以使用HOST而不是HOST。要解决此问题:
-
从User1中删除SPN,如下所示:
setspn-D主机/User1.contoso.com@CONTOSO.COM用户1
-
重新创建如下所示的keytab(我做了三个更改(,然后尝试再次:
ktpass/princ主机/server1.contoso.com@CONTOSO.COM/mapuseruser1@CONTOSO.COM/pass MyPas$w0rd/out machine.keytab/crypto-all/ptype KRB5_NT_PRINCIAL/mapop set
注意:密钥选项卡从不与AD通信。它所做的是解密入站Kerberos服务票证,以告诉用户是谁。我在这里写了一篇关于此机制的文章:https://social.technet.microsoft.com/wiki/contents/articles/36470.active-directory-using-kerberos-keytabs-to-integrate-non-windows-systems.aspx.