Active directory Kerberos/SPNEGO:同一AD帐户的多个SPN
在多个web服务器上部署相同的基于HTTP的应用程序(Active directory Kerberos/SPNEGO:同一AD帐户的多个SPN,active-directory,kerberos,tomcat8,jaas,spnego,Active Directory,Kerberos,Tomcat8,Jaas,Spnego,在多个web服务器上部署相同的基于HTTP的应用程序(srv1,srv2,等等)。使用SPNEGO auth保护应用程序。服务器是Linux,AD不知道它们的存在,即它们没有加入域。我让整个SPNEGO在一台主机上顺利运行。现在转到后续主机 我找到的大多数指南都会告诉你 广告中的叙述 SPN 密钥表(在AD服务器上生成,然后 移动到Linux主机) 虽然我相信(2)+(3)总是需要每个服务器,但我对(1)有些不确定。我只能用一个帐户吗?我真的不想有所有这些帐户在广告中,如果我能做的只有一个 有一
srv1
,srv2
,等等)。使用SPNEGO auth保护应用程序。服务器是Linux,AD不知道它们的存在,即它们没有加入域。我让整个SPNEGO在一台主机上顺利运行。现在转到后续主机
我找到的大多数指南都会告诉你
ktpass
(对于srv1
)应该如您在互联网上找到的所有指南中所述,但是后续调用(对于srv2
,srv3
)应该使用-setpass和-setupn选项
但是我发现,当使用ktpass.exe
工具时,帐户的userPrincipalName
属性将变为上次调用ktpass
时的princ参数。因此,srv的名称(例如,srv3
)被编码到名称中,因此每次调用ktpass时,帐户名称基本上都会发生变化。当web服务器执行SPNEGO事件链中的最后一步时,即使用keytab作为凭据联系AD,它将在AD中查找userPrincipalName
等于SPN的帐户,因此此步骤将失败。(,滚动至最后一篇文章,列出项目3)。与此相反的是,我使用的是Tomcat和JAAS,据我所知,我可以有效地忽略键表中的主体名称
广告中的多个应用服务器+单个帐户是否可以工作?如果可以,如何工作?简言之,是的,它可以工作,我将告诉你如何工作。首先,让我们澄清一些问题或评论中没有正确描述的事情和陈述: 您有三台提供相同DNS名称的计算机,这意味着您有一个DNS循环:service.example.com将返回一个无序列表,如果IP或负载平衡器(硬排序)根据负载为a记录只返回一个IP。对于Kerberos,两种设置的结果是相同的。 现在,如果需要Kerberos身份验证,则不能说AD不知道服务或服务器的存在。它会而且必须知道,否则它将无法为您的客户端创建服务票证,这些服务票证将传递给服务器。此外,Tomcat允许KDC接受安全上下文,因为服务票证是使用帐户的长期密钥加密的 方法如下:您已经了解到一个SPN可以绑定到一台机器,不允许多个绑定。当您将机器名绑定到机器帐户(
srv1$
等)时就是这种情况。您需要一个服务帐户。服务帐户是没有密码过期的常规帐户,例如,my-service@EXAMPLE.COM
。对于此帐户,您将绑定CNAME
或A
记录。让Tomcat验证器接受此服务帐户的所有安全上下文,它将正常工作
如何在类Unix操作系统上创建这个神奇的服务帐户?
习惯于
servicePrincipalName
)是否已绑定到该帐户,并且您已完成
重要提示:如果您的任何客户端使用MIT Kerberos或Heimdal,您必须设置rdns=false
您的krb5.conf
祝你好运 不确定您的推理——JAAS配置文件定义了系统将呈现给KDC的主体(显式)和“散列密码”(来自keytab文件)。在您的情况下,KDC是Active Directory,AD不使用主体作为帐户ID。这就是
setspn
命令的要点:定义帐户ID和(列表)SPN之间的1..N映射。我想,userPrincipalName
LDAP字段只是冰山一角。。。AD使用其他方法根据实际ID解析主体。是的,也许我的问题是我不太理解Tomcat和AD之间的最后一步中发生了什么。更重要的是AD内部发生了什么——Tomcat只连接到端口88并执行常规Kerberos操作,就像它是麻省理工学院的Kerberos服务,而不是微软的产物一样。@SamsonScharfrichter。事实证明,这是我无法理解的。我不认为这家伙真的能得到答案。Tomcat只需从服务票证中提取用户名,并不需要广告来建立用户身份。对吗?似乎有一些地方确实不需要这一步骤。如果web服务器主机加入到域或不加入域,可能就必须这样做?我猜Kerberos协议假定票据可能是伪造的,因此服务器无法在不根据KDC检查票据的情况下“接受”票据(就像它应该根据证书撤销列表检查客户机SSL证书一样)。在同一条线上,如果客户端、服务器和KDC的系统时钟不同步,身份验证将失败(可能是使用攻击者嗅探到的旧票证的重放攻击!!)实际上我没有说这三个服务器在DNS中具有相同的名称。你链接的图片不代表Tomcat是怎样的