【问题标题】:SPNEGO/Kerberos No credential found error with requests from Linux clientSPNEGO/Kerberos 来自 Linux 客户端的请求未找到凭证错误
【发布时间】:2014-05-20 11:49:25
【问题描述】:

我目前正在为客户实施基于 Java、Tomcat 和 Kerberos 的单点登录解决方案。 用户将通过其客户端浏览器访问 Intranet Tomcat 应用程序的 URL,Tomcat 应用程序通过 Kerberos 获取用户的凭据并将其重定向到实际的 Web 应用程序。 我们客户的环境是充当 KDC 的 Windows AD 服务器和 Linux Tomcat 应用程序服务器的典型混合。 SSO 功能应该用于 Windows 和 Linux 客户端。这似乎与我在网上找到的大多数答案不同,人们拥有 Linux Web 应用程序服务器但只使用 Windows 客户端。

现在,在我的本地设置中,我遇到了一些奇怪的行为。我的开发环境是在 Windows 7 下从 MyEclipse 8.6 运行的 Tomcat 7.0.26。我的测试环境是 Centos 6 机器上的 Apache Web 服务器后面的 Tomcat 7.0.26 或 7.0.53。我已经正确设置了 AD 服务器,生成了必要的 keytab 文件等,并且一切都在开发环境中运行顺利。我可以使用 IE 和 Firefox 从 Linux 和 Windows 客户端访问 Tomcat 应用程序,Kerberos 身份验证继续进行,并且我得到了正确的重定向。

在测试服务器上部署 Tomcat 应用程序时,它会在尝试从 Windows 客户端登录时继续工作。但是,当我尝试从 Linux 客户端访问测试服务器时(我已尝试从 Linux Mint 13 和 Ubuntu 13.10),我收到以下错误:

javax.servlet.ServletException:GSSException:没有找到凭据:1.3.6.1.5.2.51.3.6.1.5.2.5 用法:接受 net.sourceforge.spnego.SpnegoHttpFilter.doFilter(SpnegoHttpFilter.java:233)

我不得不承认我没有正确理解这条信息。它是否指向客户端提供的凭据有问题,或者是应用程序服务器与 KDC 协商的问题?我对这个问题进行了一些研究,发现指示的 oid 1.3.6.1.5.2.5 代表 GSS_IAAKERB_MECHANISM 而不是 GSS_KRB5_MECHANISM 或 GS​​S_SPNEGO_MECHANISM,我觉得这很奇怪。此外,似乎没有其他人有完全相同的问题。

我尝试从 MIT Kerberos 切换到 Heimdal Kerberos 并返回。我试过Firefox和Chromium,在应用服务器上我在Tomcat 7.0.26和7.0.53之间切换,问题仍然存在。我正在使用最新的 spnego.jar。

现在:从 Linux 调用 Windows 开发机器上运行的 Tomcat 成功,从 Linux 客户端调用 Linux 应用程序服务器失败,两种浏览器都尝试了相同的错误消息。

对此有什么想法吗?

【问题讨论】:

    标签: java linux tomcat kerberos spnego


    【解决方案1】:

    GSS_IAKERB_MECHANISM 表示客户端无法确定领域/kdc 以创建服务票证,并要求服务器充当目标 KDC 的中间人。检查 Wireshark 流量。您现在的任务是分析客户端无法为该 SPN 创建服务票证的原因。我在使用 Microsoft KDC 的 FreeBSD 上的 Heimdal 上观察到了这个问题。

    所以问题不在于您的 Tomcat 实例。

    【讨论】:

    • 非常感谢您的回复(尽管起初看起来很神秘)。我做了一些更多的研究,我也第一次使用了 Wireshark(以前我只使用过 tcpdump)——非常有启发性。这个问题原来是由一些有缺陷的反向 DNS 映射引起的。在请求服务票据时,我客户端的 GSSAPI-lib 获取了服务的 IP,获取了 IP 的反向映射,并使用结果来获取票据。由于结果错误,KDC 拒绝了服务票证。
    • 是的,没错。您应该知道 SSPI 实际上并没有执行反向 DNS 查找,而是依赖于 SPN 匹配 CNAME 记录。我个人在 MIT/Heimdal Kerberos 中禁用了反向 DNS 查找。请注意,DNS 条目不是必需的,而是不正确的。如果您有在服务器 phys 上运行的服务的规范名称。机器,但在一个主机名下,您需要一个服务帐户,在这里反向查找并不简单。
    猜你喜欢
    • 2020-09-27
    • 2017-08-22
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    相关资源
    最近更新 更多