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

Van*_*thi 6 spn kerberos keytab

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

setspn -a CS/dummy@abc.com虚拟用户

setspn -l虚拟用户

给出输出为

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虚拟用户

给出输出为

CS /虚拟

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

setspn -a CS /虚拟虚拟用户

setspn -a CS/dummy@abc.com虚拟用户

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

T-H*_*ron 3

由于您没有提及,我会假设您处于 Windows Active Directory 域环境中?我这么说是因为您的示例中给出的命令“ktpass”是 Windows 原生的。基于此,我假设您的 Active Directory DNS 域名是 abc.com,Kerberos 领域名称是 ABC.COM。

\n\n
    \n
  1. 创建密钥表时,SPN 将映射到当时的用户或计算机对象(Kerberos 术语中的主体),因此您无需随后调整该主体的 SPN,除非您将它们添加为辅助 SPN。
  2. \n
  3. 帮自己一个忙,将 Kerberos 领域名称以大写形式放入密钥表创建命令中。最好将密码随机化,这样没人知道。Kerberos SSO 功能可以很好地配合它。并且 Kerberos 领域名称需要附加到“/mapUser”参数中。我已将您的示例修改为您应该使用的更好的示例。
  4. \n
  5. 它超出了您的问题范围,但不再使用 DES 加密。它长期以来在行业中失宠。我不会对此多说,因为这不是你要问的。
  6. \n
  7. 不要使用“setspn -a”语法在主体上添加或创建 SPN,而是使用“setspn -s”,因为“-s”检查重复的 SPN,而“-a”则不会(请参阅:\ xe2 \x80\x9csetspn -s\xe2\x80\x9d 与 \xe2\x80\x9csetspn -a\xe2\x80\x9d)。
  8. \n
  9. 确保您完全限定 SPN 的主机部分(即 dummy.abc.com,而不仅仅是虚拟)。否则,身份验证机制可能会立即尝试 NTLM 而不是 Kerberos,这不是您想要的。
  10. \n
  11. 在仅包含单个 DNS 域和单个 Kerberos 领域的简单环境中,并且已经设置了 Kerberos 领域到 DNS 域的映射(在 UNIX/Linux 上通常由 /etc/krb5.conf 设置,Windows 会自动处理该设置,但如果如果不存在,那么它将尝试 C:\\Windows\\krb5.ini(如果存在),而在运行“setspn -a”或“setspn -s”时,您不需要将 Kerberos 领域限定为 SPN 的一部分,您应该在 Kerberos 创建命令中执行此操作。
  12. \n
\n\n

因此,就您的情况而言,根据我提到的所有内容,您可以使用:

\n\n
setspn -a CS/dummy dummyuser\n
Run Code Online (Sandbox Code Playgroud)\n\n

最好这样做:

\n\n
setspn -s CS/dummy.abc.com dummyuser\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了获得额外的奖励,我还相应地修改了您的密钥表创建命令,但保留了 DES 部分以免进一步混淆。

\n\n
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\n
Run Code Online (Sandbox Code Playgroud)\n