Kerberos 和多个 SPN

标签 kerberos spn keytab upn ktpass

我设法为 1 台服务器设置 Kerberos 身份验证,并且运行正常。现在我有一个项目,我必须将另一个服务器添加到 Kerberos 配置中,如下所示:

1)AD服务器

2) 运行服务的server1

3) server2 将运行相同的服务

所以我执行了setspn命令来将两者分配给单个“spn”用户:

setspn -s serviceX/[email protected] spn

setspn -s serviceX/[email protected] spn

然后我执行了命令 ktpass:

ktpass -princ serviceX/[email protected] -ptype KRB5_NT_PRINCIPAL -crypto AES256-SHA1 -mapuser serviceX\spn -out C:\keytab +rndPass

接下来我应该做什么才能让它发挥作用? 如何为server2执行ktpass? 当我对 server2 尝试相同的命令时,我收到警告:

警告:无法设置 UPN serviceX/server2.domain.com ptype 1 vno 10 etype 0x12 kinits 到“serviceX/server2.domain.com”将会失败。

你们如何为同一服务但在不同服务器上设置 kerberos 身份验证? 您是否创建 2 个 spn 用户和 2 个 key 表? 我认为我需要将所有内容都放在 1 个 key 表中,因为服务需要它。 有什么帮助吗?

最佳答案

您可以通过使用与目录中的用户帐户(而不是每台服务器)绑定(bind)的 SPN,使用相同的 key 表在两台不同的服务器上运行 serviceX。为此,您需要将 SPN 与虚拟服务器名称(也称为“VIP”)而不是真实服务器名称相关联。在我目前的组织中,我们一直这样做。因此,由于 SPN 将使用 DNS 中的虚拟服务器名称,因此您只需配置负载平衡器即可将对该虚拟名称的任何查询发送到其背后“应答”该名称的真实服务器。因此,在这种情况下,您不必担心 server1 和 server2 都有唯一的 key 表,只需为我将其称为 server-vip 创建一个 key 表,然后将相同的 key 表复制到这两个服务器服务器。如果您没有负载均衡器,那么您可以仅使用 DNS 循环来完成此操作。因此,下面的示例将是新的 key 表创建语法,请注意只有一件事发生了变化。这样做的另一个好处是它能够适应服务器的变化。当您最终停用服务器 1 和服务器 2 时,您可以轻松地将 key 表复制到服务器 3 和服务器 4 上。

ktpass -princ serviceX/server-vip[email protected] -ptype KRB5_NT_PRINCIPAL -crypto AES256-SHA1 -mapuser serviceX\spn -out C:\keytab +rndPass

关于Kerberos 和多个 SPN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46198868/

相关文章:

hadoop - 结合使用JAVA API的kerberized webhdfs/hdfs

java - 检查 Java 中的 Kerberos KeyTab 文件是否有效

java - 使用 Java 对启用 Kerberos 的 Hadoop 集群进行身份验证

.net - 协商时重置为 Kerberos :Kerberos faults to NTLM

Kerberos:UPN 和 SPN 之间的区别

wcf - 我需要为 net.tcp 服务设置什么 SPN?

WCF - 为什么 netTCPBinding 可以在没有任何 SPN 设置的情况下与 Kerberos 身份验证一起正常工作?

azure - Keytab 文件的内容可以从 Azure Key Vault 存储和使用吗?

asp.net - ASP站点可与Win7 IE 11一起使用,但不能与Win10 IE11一起使用