Kerberos 身份验证的 GPO 设置

Kerberos 身份验证的 GPO 设置

我的客户要求我的基于 Linux 的 Web/应用程序服务器在 Windows 域中进行 SSO。服务器安装了自己的密钥表,一切运行正常。Windows 域 (EXAMPLE.ORG) 有一个与 SPN HTTP/server.example.org 关联的服务用户帐户。我的应用程序服务器 (WildFly) 要求 Kerberos 身份验证并拒绝 NTLM 身份验证。

我有一个使用默认设置创建的测试域(基于 2016)。我尝试在测试域中重复此设置,但无法使 Kerberos 正常工作。我看到来自服务器的协商请求,但客户端始终返回 NTLM 票证。

WWW-Authenticate: Negotiate                 (request)
Authorization: Negotiate TlRMTVNTU.....     (reply)

在客户基础设施中,我看到 Kerberos 票证也存在同样的情况

WWW-Authenticate: Negotiate                 (request)
Authorization: Negotiate YIIHmAYGKw....     (reply)

我看到的唯一区别(除了 GPO)是我的 SPN 不在同一个 DNS 域内。我的 AD 域是 tdm.sample.org,服务器是 server.sample.org,我不知道这是否重要。

不久前,我在域中也遇到了同样的问题。IE 客户端和加入同一域的 IIS 的 Windows Server 2016 也都在使用 NTLM。

我相信很少有 GPO 设置来规范客户端如何授权或不授权,但我读过的所有文档都无济于事。

有没有清晰的描述 Kerberos 客户端身份验证有哪些限制,或者可以应用任何提示或调试策略?

答案1

当 Windows 甚至不尝试 Kerberos 授权时,存在一些限制。

1. SPN 指向 PTR,而不是 Web 别名

如果您的非域成员 Web 服务器有别名,则无需在该别名上分配 SPN。它将根据该服务器的真实 DNS 记录进行检查。

假设你有这个:

A record server.example.org -> 10.0.0.1
PTR record 10.0.0.1 -> server.example.org
CNAME record webapp.example.org -> server.example.org

访问webapp.example.org您不需要 SPNHTTP/webapp.example.org,你应该分配HTTP/服务器.example.org仅限服务记录。我认为如果没有 PTR 记录,它应该是一个 IP 地址。

2. 域成员不应被用其他名称来称呼。

我有一个启用了 IIS 和 Windows 集成身份验证的域成员服务器。由于我的网络设置,它在非域和域网络中都设置了 DNS:

srv.example.org -> 10.0.0.1
10.0.0.1 -> srv.example.org

并且它也注册了域名:

srv.tdm.example.org -> 10.0.0.1

如果以 srv.example.org 的身份访问此服务器,则不允许使用 Kerberos,只有以 srv.tdm.example.org 的身份访问时,Kerberos 才会起作用。即使通过 IP 地址访问,它也不会起作用。

我猜测这个事实的本质是由域中的 Windows 名称解析引起的,这通常发生在 DNS 之前。

我会继续寻找并更新这个答案。

相关内容