为什么在 Kerberos 身份验证的初始阶段进行 SPN 的反向 DNS 查找?

为什么在 Kerberos 身份验证的初始阶段进行 SPN 的反向 DNS 查找?

从根本上讲,Kerberos 并不是一个过于复杂的协议。我还已成功配置了一台服务器,使其通过 SPNEGO HTTP 标头接受 Kerberos 身份验证。不过,我是这个领域的新手,所以也许我忽略了一些东西……

令人困惑的部分Kerberos 及其实现是选修的客户端在将生成的 SPN 发送到 KDC 之前对服务器的主机名进行反向 DNS 查找,以便获取由该 SPN 标识的服务器/应用程序的票证。因此,客户端可以使用最初请求的主机名(这可能是一个别名 - CNAME),或者在生成的 SPN 中反向查找 IP 地址所属服务器的名称。这会使 Kerberos 设置变得非常复杂。

Kerberos 规范(RFC 4120)似乎倾向于避免反向查找(也称为“规范化”):

1.3. 选择要通信的主体

...


实现注意事项:许多当前实现都会对提供的服务名称进行一定程度的规范化,通常使用 DNS,尽管这会带来安全问题。但是, 对于服务名称是 大小写折叠为小写还是使用反向解析,实现之间
并不一致。为了 最大限度地提高互操作性和安全性,应用程序应提供 安全机制,其名称是将用户输入的名称折叠 为小写,而不执行任何其他修改 或规范化。





例如,广泛使用的 MIT Kerberos 实现提供了禁用反向查找的选项,甚至有几种场景建议何时应禁用反向查找,例如他们的文件。另一方面,在 Windows 中,反向查找似乎是硬编码的(参见相关问题在 Windows 上全局禁用 Kerberos 的反向 DNS 查找?)。

问题反向查找不仅会破坏服务器别名 (CNAMES) 的使用,而且当同一台机器上的不同程序决定以不同的方式处理它时,它们的可选性可能会导致真正意想不到且不稳定的行为。例如当Fiddler 使 Kerberos 身份验证正常工作。并且从我的测试来看,与 Chrome 或 IE 不同,当前的 Firefox 甚至会在请求的主机名与使用的 Kerberos 客户端库查找的主机名不匹配时拒绝向服务器发送 Keberos 令牌。

那么问题来了:为什么Kerberos 客户端是否存在这种最有问题的默认行为?有没有真实的如今受益除了在未提供 FQDN 时获取服务器的 FQDN 或“向后兼容”之外,是否可以通过执行反向查找来获取?被调用服务器的身份是否可以通过 SSL 的广泛使用得到某种程度的确认?

附加问题:没有新的标准来应对这个 Kerberos“怪癖”吗?

答案1

我一直以为这是为了破坏 CNAMES。

答案2

我想这可能是为什么我的 keberoized 应用程序在 Windows 环境中运行良好(仅使用 CNAME 的一个 SPN),但在 Unix 环境中运行该应用程序需要另一个主机名的 SPN。

相关内容