Kerberos 服务只能在运行 ktpass.exe 后 30 分钟内登录

Sau*_*rup 6 linux active-directory kerberos

我正在尝试对 Apache 服务器进行 Kerberize,并允许创建的服务器主体登录到 Active Directory。我遵循了在线提供的众多教程之一,它似乎工作正常。我在项目的 Linux 方面,而企业 IT 在 Windows 方面。

IT 为我提供了一个服务帐户和一个服务主体。在此示例中,我将其称为 HTTP/mysite.mycorp.com@MYCORP.COM。他们为我提供了该主体的密钥表文件,其中涉及在 AD 服务器上运行名为 ktpass.exe 的工具。

我已经验证 AD/KDC 的 KVNO 和密钥表文件匹配。一切都很好。

主机名有正确的 DNS A 记录,IP 有正确的 PTR 记录。两台服务器时间同步。

我可以使用已发布的密钥表文件从 AD/KDC 请求上述服务主体的票证,如下所示:

kinit -k -t http.keytab HTTP/mysite.mycorp.com@MYCORP.COM
Run Code Online (Sandbox Code Playgroud)

这有效。我获得了一张票,我可以使用这张票来处理诸如查询 AD/LDAP 目录之类的事情。密钥表也非常适合运行 Single Signon Apache 站点,这也是本练习的部分目标。

半个小时过去了。

尝试使用上述 kinit 命令登录现在失败并显示以下消息:

Client not found in Kerberos database
Run Code Online (Sandbox Code Playgroud)

我无法作为服务主体进行身份验证,就像在 AD 服务器上删除了主体一样。

现在它变得很奇怪,至少对我来说:

根据请求,AD 管理员再次运行 ktpass.exe 工具,为我的服务构建一个新的密钥表文件。KVNO(密钥版本号)在服务器上增加,导致我们的 Apache 测试服务器停止验证 Kerberos 单点登录。这是我目前的配置所预期的。令我们所有人惊讶的是,现在 kinit 命令再次起作用了。我们又给自己买了半小时,然后它又停止工作了。

我们的 IT 部门在这里不知所措,他们推测这是 AD 服务器本身的问题。我认为这是配置,但据他们说,他们的设置中的任何地方都没有半小时限制。

我遵循了http://www.grolmsnet.de/kerbtut/(参见第 7 节),但在我找到的所有文档中,该方法似乎都相同。我没有找到任何关于服务主体时间限制的参考。

编辑:这似乎是一个复制问题。虽然复制过程没有报错,但是服务账号的SPN值从“HTTP/mysite.mycorp.com@MYCORP.COM”更改(恢复?)到“name-of-service-account@mycorp.com” “30 分钟后。

Sau*_*rup 1

谢谢你们的意见,伙计们。我们邀请了 Microsoft,他们帮助我们调试 AD 端的身份验证过程。一切都按预期进行,但三十分钟后失败了。

当我们进行远程调试会话时,其中一个参与者注意到服务帐户的 UPN/SPN 突然从HTTP/mysite.mycorp.com@MYCORP.COM重新设置为service-account@mycorp.com。经过大量挖掘(包括调试 AD 复制),我们找到了罪魁祸首:

有人制作了一个定期运行的脚本(或者可能按事件运行,因为运行 ktpass.exe 后恰好是三十分钟),该脚本更新了 UPN/PSN 以“确保云连接”。我没有任何关于这样做的原因的补充信息。

脚本已更改为允许以@mycorp.com结尾的现有 UPN/SPN 值,从而有效解决了问题。

调试此类问题的提示:

  • 确保身份验证的所有参与者都支持相同的加密类型。避免使用 DES——它已经过时且不安全。
  • 确保在服务帐户上启用 AES-128 和 AES-256 加密
  • 请注意,在服务帐户上启用 DES 意味着“此帐户仅使用 DES”,即使您启用了任何 AES 加密也是如此。搜索UF_USE_DES_KEY_ONLY以获取有关此内容的详细信息。
  • 确保 UPN/SPN 值正确并且与颁发的 keytab 文件中的值匹配(即通过 LDAP 查找)
  • 确保密钥表文件中的 KVNO(密钥版本号)与服务器上的 KVNO(密钥版本号)匹配
  • 检查服务器和客户端之间的流量(即使用 tcpdump 和/或 WireShark)
  • 启用 AD 端身份验证调试 - 检查日志
  • 在 AD 端启用复制调试 - 检查日志

再次感谢您的意见。