我有一个在 Tomcat 和 Linux 上运行的 Java Web 应用程序。
此应用程序对客户端使用 Kerberos 身份验证,因此工作站能够连接到站点,并且其 Windows 凭据将用于自动登录。
这部分所有工作正常。但是,此 Web 应用程序还需要调用在 Windows 上运行的另一个 HTTP 服务器来访问服务。它通过使用用户凭据的 Kerberos 委派来实现这一点。从历史上看,这在过去一直运行良好,但是随着最近的 Windows 更新,现在无法正常工作。
Java 应用程序日志显示此错误(已编辑以删除个人信息)
ERROR 2023-01-12T05:55:25,392-0800 [[email protected], #B-60, #1855] wp.router.DelegatingStrategy: Kerberos login to winserver01 failed
org.ietf.jgss.GSSException: No valid credentials provided (Mechanism level: No valid credentials provided (Mechanism level: KDC cannot accommodate requested option (13)))
我在 Java 服务器上使用 Wireshark 检查了 Kerberos 数据包,看看 TGS 请求中发送了哪些选项可能会产生错误KDC cannot accommodate requested option (13)
我看到了同样的事情:
因此,我深入研究了 TGS-REQ,看看请求的选项中哪些无法满足。
尽管我在该实现中的任何地方都没有使用约束委派,但约束委派也被设置为 True。
经过进一步研究,我觉得这可能是Microsoft Credential Guard是在做
我尝试禁用它,但无济于事。需要一些帮助来弄清楚为什么强制使用约束委派。我了解不使用约束委派的所有安全隐患,我只是想了解导致此问题的原因。