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

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

Базовая установка:

У меня есть одна среда, в которой 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.(Unknown Source)
    at sun.security.jgss.krb5.InitSecContextToken.(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.

9
задан slt 14 December 2011 в 17:39
поделиться