ошибка контрольной суммы: Kerberos / Spring / Active Directory (2008)

У нас проблемы с настройкой аутентификации Kerberos / AD для работы с веб-приложением Spring, и я считаю, что проблема связана с типами шифрования для билетов Kerberos и функциональным уровнем домена Active Directory.

Базовая настройка:

Tomcat 7Java 1.6 (29)Windows Server 2008 R2Весна 3.0Расширение Spring Security Kerberos / Spnego M2 подробно описано здесь:http://blog.springsource.com/2009/09/28/spring-security-kerberos/

У меня есть одна среда, где функциональным уровнем домена Active Directory является Windows Server 2003, и все работает нормально, клиенты аутентифицируются должным образом, если они вошли в домен. Используя kerbtray для проверки билетов в этой среде, я вижу, что все они имеют как тип шифрования билетов, так и тип шифрования ключей «RSADSI RC4-HMAC».

У меня новый домен с функциональным уровнем Windows Server 2008, и здесь аутентификация не работает. Ошибка приложения, возвращаемая при попытке проверить билет:

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)

Трассировка стека показывает «ArcfourCrypto.decrypt», поэтому, по-видимому, трактует билет Kerberos как RC4-HMAC. Снова используя kerbtray для проверки заявок, на этот раз на клиенте есть 2 заявки на домен: krbtgt / .COM. Оба билета имеют ключ шифрования типа RSADS1 RC4-HMAC, один также имеет этот тип шифрования билетов, а другой имеет «Kerberos AES256-CTS-HMAC-SHA1-96».

Я не знаю наверняка, что это является причиной проблемы, но это единственное различие, которое я смог найти в двух средах, которые могут объяснить исключение аутентификации. Я пытался изменить политику шифрования AD, пробовал IE и Firefox, и почти все остальное, что мог придумать, но ничего не помогло.

Любая помощь в решении этой проблемы будет принята с благодарностью. Я предпочел бы исправить это на Java-конце, так как я, вероятно, не могу слишком много диктовать в настройке AD.

Ответы на вопрос(2)

Ваш ответ на вопрос