Apache2 Apache向Kerberos发送错误的服务器主体名称

Apache2 Apache向Kerberos发送错误的服务器主体名称,apache2,ldap,debian,kerberos,Apache2,Ldap,Debian,Kerberos,我正在尝试对我的apache进行kerberos身份验证。 我有两个网站在同一台服务器上运行,我使用VirtualHosts来实现这一点,并将DNS设置为该服务器有两个名称,每个网站有一个单独的名称。 我最近添加了一个新的ldap/Kerberos服务器,并尝试将我的一个网站连接到该服务器,但未能获得正确的凭据以使其正常工作。 在添加一些调试之后,我发现apache查找HTTP/fist服务器名而不是HTTP/second服务器名,因此无法在Kerberos数据库和keytab中找到正确的主体。

我正在尝试对我的apache进行kerberos身份验证。 我有两个网站在同一台服务器上运行,我使用VirtualHosts来实现这一点,并将DNS设置为该服务器有两个名称,每个网站有一个单独的名称。 我最近添加了一个新的ldap/Kerberos服务器,并尝试将我的一个网站连接到该服务器,但未能获得正确的凭据以使其正常工作。 在添加一些调试之后,我发现apache查找HTTP/fist服务器名而不是HTTP/second服务器名,因此无法在Kerberos数据库和keytab中找到正确的主体。 如何强制apache对第二个服务器名进行检查,以验证来自第二个网站的调用?看来在apache配置中添加ServerName属性还不够! 我可以通过更改hosts文件中的服务器名称顺序来实现这一点,但是如果我想从这两个服务器名称中进行身份验证,这将无济于事


谢谢

我假设您使用的是mod_auth_路缘石。您需要添加:

KrbServiceName Any

到您的Apache配置。这将告诉mod_auth_kerb接受对其使用的密钥表中存储有密钥的任何主体的身份验证,而不是假设将使用哪个主体,只接受对该主体的身份验证。

您需要确定要为每个网站使用哪个Kerberos SPN。通过运行:
klist-k
——确保正在检查Apache使用的密钥表文件,可以检查密钥表中列出的SPN

VirtualHost
声明中,您需要更改
KrbServiceName
值,以匹配从键选项卡中标识的值。重新启动Apache,它应该在与Kerberos通信时开始使用它

例如:

 KrbServiceName HTTP/yourservice.domain@REALM.COM

确保AD有一个匹配的服务帐户和SPN,并且它可以通过DNS解析回Apache服务器。

我最近在MIT Kerberos文档中发现了这一点:

当接受身份验证时,应用程序可以选择在其服务主体名称中使用默认主机名组件,这可以避免某些类型的主机名不匹配。因为还不是所有相关应用程序都这样做,所以使用krb5.conf设置:

将允许Kerberos库覆盖应用程序对服务主体主机名的选择,并允许服务器程序使用其keytab中与服务名称和领域名称(如果给定)匹配的任何键接受传入的身份验证此设置默认为“false”,在krb5-1.10及更高版本中可用

[libdefaults]
    ignore_acceptor_hostname = true