我有个问题。有一个用 Java 编写的客户端和服务器应用程序。Java 客户端使用 Kerberos 身份验证连接到服务器,客户端需要从服务器检索令牌 - 它使用 Waffle 库,该库使用 JNA,调用 SSPI API 的 InitializeSecurityContext 函数(https://docs.microsoft.com/en-us/windows/win32/api/sspi/nf-sspi-initializesecuritycontexta)。
InitializeSecurityContext 函数调用失败,出现 SEC_E_DOWNGRADE_DETECTED 异常(消息:系统无法联系域控制器来处理身份验证请求。请稍后再试。)https://docs.microsoft.com/en-us/windows/win32/com/com-error-codes-4)
客户端计算机位于 Windows 域中,用户位于此域中,可以 ping 通该域及其所有控制器。网络适配器的域也会显示(vtm.local 域)。
你能帮我吗?问题的原因是什么?为什么是 SEC_E_DOWNGRADE_DETECTED?
谢谢。
答案1
这是我的错。InitializeSecurityContext 函数被调用时使用了错误的目标主体。通过 wireshark 工具监控客户端和域控制器之间的 tcp 连接后,这一点很明显。