首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kerberos/SPNEGO :同一个AD帐户的多个SPN

Kerberos/SPNEGO :同一个AD帐户的多个SPN
EN

Stack Overflow用户
提问于 2016-09-13 19:34:23
回答 1查看 6.9K关注 0票数 4

在多个web服务器(srv1srv2等)上部署相同的基于HTTP的应用程序。用SPNEGO保护应用程序。服务器是Linux,AD不知道它们的存在,也就是说,它们没有加入域。我已经让整个SPNEGO顺利地在一个主机上工作。现在转移到后续的主机。

我找到的大多数指南都会告诉你你需要

  1. AD中的帐户
  2. SPN
  3. 一个keytab (在AD服务器上生成,然后移动到Linux主机)

虽然我相信(2) + (3)总是需要每台服务器,但我对(1)有点不确定。我只能用一个帐户吗?如果我只能用一个账户的话,我真的不想在AD中有所有这些帐户。

这个博客有一个很好的方法来实现它:第一次调用ktpass (对于srv1)应该如您在互联网上找到的所有指南中所描述的那样,但是后续的调用(对于srv2srv3等)应该使用-setpass和-setupn选项。

但是,我发现,当您使用ktpass.exe工具时,帐户的userPrincipalName属性将更改为由ktpass上次调用的princ参数提供的。因此,srv的名称(例如srv3 )被编码到名称中,因此帐户的名称在每次调用ktpass时基本上都会更改。当web服务器执行SPNEGO事件链中的最后一步(即使用keytab作为凭据与AD联系)时,它将在AD中查找一个帐户,其userPrincipalName等于SPN,因此此步骤将失败。(来源,滚动到最后一篇文章,列出项目3)。与此相矛盾的是,我使用的是Tomcat,因此是JAAS,据我所知,我可以使用文件,从而有效地忽略了keytab中的主体名称。

多个应用服务器+ AD中的单个帐户可以工作吗?如果可以的话,如何工作?

EN

回答 1

Stack Overflow用户

发布于 2016-09-17 11:23:45

简而言之,是的,它会起作用的,我会告诉你怎么做的。首先,让我们澄清你的问题或评论中没有正确描述的一些事情和一些陈述:

您有三台提供相同DNS名称的计算机,这意味着您要么有一个DNS循环:如果IP或负载均衡器(硬排序)将根据负载的不同,返回一个洗牌列表。对于Kerberos,这两个设置在结果上是相等的。现在,如果需要Kerberos身份验证,则不能说AD不知道服务或服务器的存在。它将和必须知道,否则它不能为您的客户端创建服务票,而这些服务票将传递给服务器。此外,Tomcat 联系方式 KDC接受安全上下文,因为服务票证是用帐户的长期密钥加密的。

这是一种方法:您已经知道一个SPN可以绑定到一台机器上,不允许多个绑定。当您将机器名绑定到计算机帐户(srv1$等)时,情况就是如此。您需要一个服务帐户。服务帐户是一个没有密码过期的常规帐户,例如my-service@EXAMPLE.COM。对于这个帐户,您将绑定您的CNAMEA记录。让Tomcat身份验证器接受这个服务帐户的所有安全上下文,它就能工作了。

如何在类似Unix的操作系统上创建这个神奇的服务帐户?使用mskutil

  1. 创建服务帐户,
  2. 为该服务帐户创建一个键签,
  3. 将SPN绑定到该服务帐户,并更新keytab。

在此之后,您将拥有一个适合您使用的键签。使用LDAP查询(例如,使用Softerra的LDAP浏览器或其他方法)验证帐户是否存在,SPN (servicePrincipalName)绑定到该帐户,您就完成了。

重要:如果您的客户使用MIT或Heimdal,您必须 set rdns = false您的krb5.conf

祝你好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39477704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档