我有一个支持 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 地址具有不同的主机名条目,则可能由于主体不匹配而导致协商失败。
因此我的建议是比较服务器和一个客户端的反向名称解析。