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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache向Kerberos发送错误的服务器主体名称相关的知识,希望对你有一定的参考价值。

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

谢谢。

答案

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

KrbServiceName Any

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

另一答案

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

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

一个例子看起来像:

 KrbServiceName HTTP/yourservice.domain@REALM.COM

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

另一答案

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

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

[libdefaults]
    ignore_acceptor_hostname = true

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

以上是关于Apache向Kerberos发送错误的服务器主体名称的主要内容,如果未能解决你的问题,请参考以下文章

Kerberos常见问题汇总

Kerberos认证原理

Janusgraph 库无法在 kerberos 环境中与 hbase 通信(无法指定服务器的 Kerberos 主体名称)

为啥我们在启用 Kerberos 的 EMR 集群上使用直线连接到 Hive 时使用 Hive 服务主体?

为 Schema Registry 定义 Kerberos 主体名称

presto集成kerberos以及访问集成了kerberos的hive集群