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

时间:2013-02-04 12:54:57

标签: apache2 ldap debian kerberos

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

感谢。

3 个答案:

答案 0 :(得分:4)

我假设您正在使用mod_auth_kerb。你需要添加:

KrbServiceName Any

到你的Apache配置。这将告诉mod_auth_kerb接受对其使用的密钥表中存储密钥的任何委托人的身份验证,而不是假设将使用哪个委托人并仅接受对该委托人的身份验证。

答案 1 :(得分:3)

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

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

示例如下:

 KrbServiceName HTTP/yourservice.domain@REALM.COM

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

答案 2 :(得分:0)

我最近在Principal names and DNS上的MIT Kerberos文档中找到了这个:

  

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

[libdefaults]
    ignore_acceptor_hostname = true
  

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