checksum falló: Kerberos / Spring / Active Directory (2008)

Tenemos problemas para lograr que la autenticación Kerberos / AD funcione con una aplicación web Spring, y creo que el problema tiene que ver con los tipos de cifrado para los tickets de Kerberos y el nivel funcional del dominio de Active Directory.

La configuración básica es:

Tomcat 7Java 1,6 (29)Windows Server 2008 R2Spring 3.0Spring Security Kerberos / Spnego extensión M2 detallada aquí:http: //blog.springsource.com/2009/09/28/spring-security-kerberos

Tengo un entorno en el que el nivel funcional del dominio de Active Directory es Windows Server 2003 y todo funciona bien, con clientes que se autentican como se esperaba si inician sesión en el dominio. Al usar kerbtray para examinar los tickets en este entorno, puedo ver que todos tienen el tipo de cifrado de tickets y el tipo de cifrado de clave "RSADSI RC4-HMAC".

Tengo un nuevo dominio con nivel funcional Windows Server 2008, y aquí es donde la autenticación no funciona. El error de la aplicación devuelto al intentar validar el ticket es:

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)

El seguimiento de la pila muestra "ArcfourCrypto.decrypt", por lo que presumiblemente trata el ticket Kerberos como RC4-HMAC. Usando kerbtray nuevamente para examinar los tickets, esta vez hay 2 tickets en el cliente para el dominio: krbtgt / .COM. Ambos tickets tienen un tipo de cifrado de clave RSADS1 RC4-HMAC, uno también tiene esto para el tipo de cifrado de tickets, pero el otro tiene "Kerberos AES256-CTS-HMAC-SHA1-96".

No estoy seguro de que esta sea la causa del problema, pero es la única diferencia que he podido encontrar en los dos entornos que podría explicar la excepción de autenticación. Intenté cambiar la política de cifrado de AD, probé IE y Firefox, y casi todo lo demás que se me ocurrió, pero nada funcionó.

Cualquier ayuda para abordar esto sería muy apreciada. Prefiero arreglarlo en el extremo de Java ya que probablemente no puedo dictar demasiado sobre la configuración de AD de producción.

Respuestas a la pregunta(4)

Su respuesta a la pregunta