checksum falhou: Kerberos / Spring / Active Directory (2008)

Estamos com problemas para que a autenticação Kerberos / AD funcione com um aplicativo da Web Spring e acredito que o problema esteja relacionado aos tipos de criptografia dos tickets Kerberos e ao nível funcional do domínio do Active Director

A configuração básica é:

Tomcat 7Java 1.6 (29)Windows Server 2008 R2Spring 3.0Spring Security Kerberos / Spnego extensão M2 detalhados aqui:http: //blog.springsource.com/2009/09/28/spring-security-kerberos

Tenho um ambiente em que o nível funcional do domínio do Active Directory é o Windows Server 2003 e tudo funciona bem, com os clientes se autenticando conforme o esperado, se estiverem conectados ao domínio. Usando o kerbtray para examinar os tickets nesse ambiente, posso ver que todos eles têm o tipo de criptografia de ticket e o tipo de criptografia de chave "RSADSI RC4-HMAC".

Tenho um novo domínio com nível funcional Windows Server 2008 e é aqui que a autenticação não funciona. O erro do aplicativo retornado ao tentar validar o ticket é:

Kerberos validation not successful...

Caused by: GSSException: Failure unspecified at GSS-API level (Mechanism level: Checksum failed)
    at sun.security.jgss.krb5.Krb5Context.acceptSecContext(Unknown Source)
    at sun.security.jgss.GSSContextImpl.acceptSecContext(Unknown Source)
    at sun.security.jgss.GSSContextImpl.acceptSecContext(Unknown Source)
    at sun.security.jgss.spnego.SpNegoContext.GSS_acceptSecContext(Unknown Source)
    at sun.security.jgss.spnego.SpNegoContext.acceptSecContext(Unknown Source)
    at sun.security.jgss.GSSContextImpl.acceptSecContext(Unknown Source)
    at sun.security.jgss.GSSContextImpl.acceptSecContext(Unknown Source)
    at org.springframework.security.extensions.kerberos.SunJaasKerberosTicketValidator$KerberosValidateAction.run(SunJaasKerberosTicketValidator.java:146)
    at org.springframework.security.extensions.kerberos.SunJaasKerberosTicketValidator$KerberosValidateAction.run(SunJaasKerberosTicketValidator.java:136)
    ... 34 more
Caused by: KrbException: Checksum failed
    at sun.security.krb5.internal.crypto.ArcFourHmacEType.decrypt(Unknown Source)
    at sun.security.krb5.internal.crypto.ArcFourHmacEType.decrypt(Unknown Source)
    at sun.security.krb5.EncryptedData.decrypt(Unknown Source)
    at sun.security.krb5.KrbApReq.authenticate(Unknown Source)
    at sun.security.krb5.KrbApReq.<init>(Unknown Source)
    at sun.security.jgss.krb5.InitSecContextToken.<init>(Unknown Source)
    ... 43 more
Caused by: java.security.GeneralSecurityException: Checksum failed
    at sun.security.krb5.internal.crypto.dk.ArcFourCrypto.decrypt(Unknown Source)
    at sun.security.krb5.internal.crypto.ArcFourHmac.decrypt(Unknown Source)

O rastreamento de pilha mostra "ArcfourCrypto.decrypt", portanto presumivelmente está tratando o tíquete Kerberos como RC4-HMAC. Usando o kerbtray novamente para examinar os tickets dessa vez, existem 2 tickets no cliente para o domínio: krbtgt / .COM. Ambos os tickets têm o tipo de criptografia de chave RSADS1 RC4-HMAC, um também possui o tipo de criptografia de ticket, mas o outro possui "Kerberos AES256-CTS-HMAC-SHA1-96".

Não sei ao certo se essa é a causa do problema, mas é a única diferença que consegui encontrar nos dois ambientes que podem explicar a exceção de autenticação. Tentei alterar a política de criptografia do AD, tentei o IE e o Firefox e praticamente tudo o que pude pensar, mas nada funciono

Qualquer ajuda para resolver isso seria muito apreciada. Prefiro corrigi-lo no final do java, pois provavelmente não posso ditar muito sobre a instalação do AD de produçã

questionAnswers(2)

yourAnswerToTheQuestion