SPNEGO / Kerberos没有发现来自Linux客户端的请求的凭据错误

目前,我正在为基于Java,Tomcat和Kerberos的客户实施单一login解决scheme。 用户将从其客户端浏览器访问Intranet Tomcat应用程序的URL,Tomcat应用程序通过Kerberos获取用户的凭据,并将其redirect到实际的Web应用程序。 我们的客户环境是充当KDC的Windows AD服务器和Linux Tomcat应用程序服务器的典型组合。 应该从Windows和Linux客户端使用SSOfunction。 这与我在网上find的大多数答案似乎不一样,人们拥有Linux Web应用程序服务器,但只使用Windows客户端。

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

在testing服务器上部署Tomcat应用程序时,在尝试从Windows客户端login时,此function将继续工作。 但是,当我尝试从Linux客户端(我曾尝试从Linux Mint 13和Ubuntu 13.10)访问testing服务器时,出现以下错误:

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_IAKERB_MECHANISM,而不是GSS_KRB5_MECHANISM或者GSS_SPNEGO_MECHANISM,我觉得这很奇怪。 而且,没有人看起来有完全相同的问题。

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

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

任何想法在这一个?

GSS_IAKERB_MECHANISM表示客户端无法确定realm / kdc来创建服务票据,并要求服务器充当目标KDC的中间服务器。 检查Wireshark流量。 您现在的任务是分析为什么客户端无法为该SPN创建服务票证。 我在FreeBSD的Heimdal上用Microsoft KDC观察过这个问题。

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