我目前正在为基于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:找不到凭证: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应用程序服务器的调用失败,两个浏览器都尝试了相同的错误消息。
关于这个的任何想法?
答案 0 :(得分:3)
GSS_IAKERB_MECHANISM
表示客户端无法确定realm / kdc来创建服务票证,并要求服务器充当目标KDC的中间件。检查Wireshark流量。您现在的任务是分析客户端无法为该SPN创建服务票证的原因。我在FreeBSD上使用Microsoft KDC在Heimdal上观察到了这个问题。
所以问题不在于你的Tomcat实例。