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发送错误的服务器主体名称的主要内容,如果未能解决你的问题,请参考以下文章
Janusgraph 库无法在 kerberos 环境中与 hbase 通信(无法指定服务器的 Kerberos 主体名称)
为啥我们在启用 Kerberos 的 EMR 集群上使用直线连接到 Hive 时使用 Hive 服务主体?