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

问题描述 投票:2回答:3

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

谢谢。

apache2 ldap debian kerberos
3个回答
4
投票

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

KrbServiceName Any

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


3
投票

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

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

一个例子看起来像:

 KrbServiceName HTTP/[email protected]

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


0
投票

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

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

[libdefaults]
    ignore_acceptor_hostname = true

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

© www.soinside.com 2019 - 2024. All rights reserved.