如果客户端和服务器都在同一台计算机上,则无法使用 Kerberos 进行身份验证

如果客户端和服务器都在同一台计算机上,则无法使用 Kerberos 进行身份验证

我有一个支持 Kerberos 身份验证的 Tomcat Web 应用程序。它运行良好,如果我使用内置帐户(如 LOCAL SYSTEM 或 NETWORK SERVICE),我可以登录该应用程序,但我在为 Tomcat 服务设置非默认域帐户时遇到了问题。

我已经注册了必要的 SPN:

C:\Users\Administrator>setspn -l tomcatuser1
Registered ServicePrincipalNames for CN=tomcatuser1,CN=Users,DC=blah,DC=com:
        HTTP/Unicorn.blah.com
        HTTP/Unicorn

之后,我可以从域中的其他计算机登录,但不能从运行 Tomcat 服务的计算机登录。如果我使用 IP 地址,则不会出现任何问题。我还检查了我没有遇到环回问题但似乎没有影响任何事情。

因此,当我使用主机名请求网页时,我收到 401 响应。从日志中我看到协商分多个步骤进行,最后一步是服务器说我提供的授权令牌无效。实际错误消息是“指定的句柄无效”,对应于 SEC_E_INVALID_HANDLE Windows 错误。

这可能与 Kerberos 设置有关,或者是网络问题?

答案1

这可能与 Kerberos 设置有关,或者是网络问题?

Kerberos 设置与网络配置紧密相关,因此很难责怪罪魁祸首并原谅他人。

当它实际上不是一个环回问题时,它仍然可能是 IPv4 与 IPv6 问题:

如果所有客户端都使用 DNS 进行反向解析(o A 和 AAAA 记录),但服务器在本地“hosts”文件中针对其自身和/或各个 KDC 的 IPv4 和 IPv6 地址具有不同的主机名条目,则可能由于主体不匹配而导致协商失败。

因此我的建议是比较服务器和一个客户端的反向名称解析。

相关内容