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

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

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

在测试服务器上部署Tomcat应用程序时,这在尝试从Windows客户端登录时仍然有效.但是,当我尝试从Linux客户端访问测试服务器时(我尝试过Linux Mint 13和Ubuntu 13.10),我收到以下错误:

javax.servlet.ServletException: GSSException: No credential found for: 1.3.6.1.5.2.51.3.6.1.5.2.5 usage: Accept
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意味着客户端无法确定创建服务票证的域/ kdc,并要求服务器充当目标KDC的中间件.检查Wireshark流量.您现在的任务是分析客户端无法为该SPN创建服务票证的原因.我在FreeBSD上使用Microsoft KDC在Heimdal上观察到了这个问题.

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

上一篇:php – 无法获取缓存的Kerberos票证


下一篇:javascript – 我如何在架构上使用JBoss API对AngularJS应用程序进行Kerberize