密码更改后的Kerberos / Spnego身份验证问题

时间:2013-11-27 16:22:07

标签: tomcat7 windows-authentication kerberos spnego

我设置Tomcat使用SPNEGO身份验证,因此用户可以在不输入密码的情况下对我们的Web应用程序进行单点登录,一切正常。 昨天我更改了服务帐户的密码,我重新创建了keytab文件,但在Tomcat重新启动之后,SSO才开始工作。 在日志中我发现:

 exception [GSSException: Failure unspecified at GSS-API level (Mechanism level: Checksum failed)] with root cause
java.security.GeneralSecurityException: Checksum failed
        at sun.security.krb5.internal.crypto.dk.ArcFourCrypto.decrypt(ArcFourCrypto.java:388)
        at sun.security.krb5.internal.crypto.ArcFourHmac.decrypt(ArcFourHmac.java:74)
        at sun.security.krb5.internal.crypto.ArcFourHmacEType.decrypt(ArcFourHmacEType.java:83)
        at sun.security.krb5.internal.crypto.ArcFourHmacEType.decrypt(ArcFourHmacEType.java:77)
        at sun.security.krb5.EncryptedData.decrypt(EncryptedData.java:168)
        at sun.security.krb5.KrbApReq.authenticate(KrbApReq.java:267)
        at sun.security.krb5.KrbApReq.<init>(KrbApReq.java:134)
       at sun.security.jgss.krb5.InitSecContextToken.<init>(InitSecContextToken.java:79)
        at sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:724)
        at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:323)
        at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:267)
        at sun.security.jgss.spnego.SpNegoContext.GSS_acceptSecContext(SpNegoContext.java:874)
        at sun.security.jgss.spnego.SpNegoContext.acceptSecContext(SpNegoContext.java:541)
        at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:323)
        at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:267)
        at net.sourceforge.spnego.SpnegoAuthenticator.doSpnegoAuth(SpnegoAuthenticator.java:444)
        at net.sourceforge.spnego.SpnegoAuthenticator.authenticate(SpnegoAuthenticator.java:283)

由于配置应该没问题,我不知道为什么我收到此错误...可能是与未刷新的票证授予票有关的事情?

1 个答案:

答案 0 :(得分:1)

一种可能性是使用旧密码签发优质服务票的人。如果您重新生成密钥表但没有在密钥表中保留旧密钥,那么您可能希望任何未注销并登录的人刷新他们的故障单以及谁有服务的服务票据来生成该错误。如果你在客户端获得一个全新的TGT(比如通过完全从Windows登录并重新登录),它会起作用,那就是正在发生的事情。如果这不起作用,请编辑您的问题以添加详细信息,我将在另一个答案中探索其他故障。