指定SPN的正确格式是什么?

时间:2016-06-10 09:03:35

标签: kerberos spn keytab

首先,使用setspn命令为用户注册服务主体名称。

  

setspn -a CS /dummy@abc.com dummyuser

     

setspn -l dummyuser

将输出显示为

  

CS/dummy@abc.com

接下来,当使用/ mapUser选项执行ktpass命令时,将修改用户帐户的服务主体名称,以便删除域组件。

  

ktpass / pass Password @ 123 -out dummy.1.keytab -princ CS /dummy@abc.com   -crypto DES-CBC-MD5 + DumpSalt -ptype KRB5_NT_PRINCIPAL + desOnly / mapOp set / mapUser dummyuser

     

setspn -l dummyuser

将输出显示为

  

CS /虚设

以下两个命令是否都正确并且以相同的方式工作?

  

setspn -a CS / dummy dummyuser

     

setspn -a CS /dummy@abc.com dummyuser

在SPN中指定服务名称时,是否也必须包含域组件?你能澄清一下吗?

1 个答案:

答案 0 :(得分:2)

正如您未提及的那样,我假设您处于Windows Active Directory域环境中?我这样说是因为你的例子中给出的命令“ktpass”是Windows原生的。基于此,我将假设您的Active Directory DNS域名是abc.com,Kerberos域名是ABC.COM。

  1. 当您创建密钥表时,SPN会在那时映射到用户或计算机对象(主体,以Kerberos术语),因此您不需要在之后调整该主体的SPN,除非您将它们添加为辅助SPN。
  2. 帮自己一个忙,并在keytab创建命令中将Kerberos域名称大写。最好随机化密码,以便没人知道。 Kerberos SSO功能可以正常工作。并且Kerberos领域名称需要附加到“/ mapUser”参数。我已将您的示例修改为您应该使用的更好的示例。
  3. 它不在您的问题范围内,但不再使用DES加密。它长期以来一直不受业界青睐。我不会多说这个,因为那不是你要问的。
  4. 不要使用“setspn -a”语法在主体上添加或创建SPN,而使用“setspn -s”代替“-s”检查重复的SPN,而“-a”则不会(请参阅: “setspn -s” vs. “setspn -a”)。
  5. 确保您完全符合SPN的主机部分(即dummy.abc.com,而不仅仅是虚拟)。否则,身份验证机制可能会立即尝试NTLM而不是Kerberos,这不是您想要的。
  6. 在一个只包含单个DNS域和单个Kerberos领域的简单环境中,已经设置了Kerberos领域到DNS域映射(通常在UNIX / Linux上通过/etc/krb5.conf设置,Windows会自动处理但如果没有那么它将尝试C:\ Windows \ krb5.ini(如果存在),而在运行“setspn -a”或“setspn -s”时,您不需要将Kerberos领域限定为SPN的一部分,您应该在Kerberos创建命令中执行此操作。
  7. 所以,在你的情况下,基于我提到的一切,你可以使用:

    setspn -a CS/dummy dummyuser
    

    最好这样做:

    setspn -s CS/dummy.abc.com dummyuser
    

    为了额外的功劳,我还相应地修改了你的keytab创建命令,尽管保留了DES部分以免进一步混淆。

    ktpass +rndPass -out dummy.1.keytab -princ CS/dummy.abc.com@ABC.COM -crypto DES-CBC-MD5 +DumpSalt -ptype KRB5_NT_PRINCIPAL +desOnly /mapOp set /mapUser dummyuser@ABC.COM