Keycloak + Kerberos аутентификация: уровень механизма: неверный аргумент (400) - не удается найти ключ соответствующего типа для расшифровки AP REP - RC4 с HMAC - PullRequest
1 голос
/ 24 февраля 2020

У меня есть следующее

  1. весеннее веб-приложение на JBoss EAP 7.2.2 - CentOs машины
  2. Keycloak 3.3.4 на CentOs
  3. Active directory

Мы работаем на OpenJDK 8

Пользователи входят в систему с Windows компьютеров, используя свои учетные записи Active Directory.

Keycloak настроен с федерацией использования Kerberos. На машинах CentOs клиент Kerberos устанавливается с использованием

yum install krb5-user krb5-doc
yum install krb5-pkinit krb5-workstation
yum install krb5-libs krb5-devel
yum install krb5-server krb5-workstation pam_krb5

В федерации пользователей keycloak путь к файлу keytab и другие конфигурации являются правильными. Это подтверждается файлом журнала keycloak. Область: XYZ.COM Основной сервер HTTP / principal-name@REALM

Файл ключа генерируется с использованием

ktpass.exe /out file.keytab /mapuser user-name@REALM /mapop set /princ HTTP/principal-name@REALM /ptype KRB5_NT_PRINCIPAL /pass XXXXXX /crypto RC4-HMAC-NT

в файле krb5.conf. Введено следующее

default_tgs_enctypes = arcfour-hmac
default_tkt_enctypes = arcfour-hmac
permitted_enctypes = arcfour-hmac

Проблема в то время как при входе в систему мы получаем исключение

Looking for keys for: HTTP/principal-name@REALM
2020-02-24 09:34:06,327 WARN  [org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator] (default task-13) SPNEGO login failed: java.security.PrivilegedActionException: GSSException: Failure unspecified at GSS-API level (Mechanism level: Invalid argument (400) - Cannot find key of appropriate type to decrypt AP REP - RC4 with HMAC)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.authenticate(SPNEGOAuthenticator.java:68)
at org.keycloak.storage.ldap.LDAPStorageProvider.authenticate(LDAPStorageProvider.java:677)
at org.keycloak.credential.UserCredentialStoreManager.authenticate(UserCredentialStoreManager.java:296)
at org.keycloak.authentication.authenticators.browser.SpnegoAuthenticator.authenticate(SpnegoAuthenticator.java:89)
at org.keycloak.authentication.DefaultAuthenticationFlow.processFlow(DefaultAuthenticationFlow.java:200)
at org.keycloak.authentication.AuthenticationProcessor.authenticateOnly(AuthenticationProcessor.java:853)
at org.keycloak.authentication.AuthenticationProcessor.authenticate(AuthenticationProcessor.java:722)
at org.keycloak.protocol.AuthorizationEndpointBase.handleBrowserAuthenticationRequest(AuthorizationEndpointBase.java:145)

at ...
Caused by: GSSException: Failure unspecified at GSS-API level (Mechanism level: Invalid argument (400) - Cannot find key of appropriate type to decrypt AP REP - RC4 with HMAC)
at sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:856)
at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:342)
at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:285)
at sun.security.jgss.spnego.SpNegoContext.GSS_acceptSecContext(SpNegoContext.java:906)
at sun.security.jgss.spnego.SpNegoContext.acceptSecContext(SpNegoContext.java:556)
at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:342)
at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:285)
at org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.establishContext(SPNEGOAuthenticator.java:169)
at org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator$AcceptSecContext.run(SPNEGOAuthenticator.java:132)
at org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator$AcceptSecContext.run(SPNEGOAuthenticator.java:122)
... 72 more
Caused by: KrbException: Invalid argument (400) - Cannot find key of appropriate type to decrypt AP REP - RC4 with HMAC
at sun.security.krb5.KrbApReq.authenticate(KrbApReq.java:278)
at sun.security.krb5.KrbApReq.<init>(KrbApReq.java:149)
at sun.security.jgss.krb5.InitSecContextToken.<init>(InitSecContextToken.java:108)
at sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:829)
... 81 more

2020-02-24 09:34:06,328 INFO  [stdout] (default task-13)        [Krb5LoginModule]: Entering logout
2020-02-24 09:34:06,328 INFO  [stdout] (default task-13)        [Krb5LoginModule]: logged out Subject

Я уже провел много исследований и, к несчастью, исключил все возможные причины. Были выполнены следующие тесты: klist -k {путь к файлу keytab} -e

Результат 4 HTTP / principal-name@REALM arcfour-hmac В Active Directory msDS-KeyVersionNumber = 4

kinit HTTP / principal-name@REALM klist -e

Результат: ... Etype (skey, TKT) arcfour-hma c, aes256-cts-hma c -sha1-96

В итоге Keycloak может прочитать таблицу ключей, но не может найти ключ дешифрования.

Кто-нибудь может помочь?

Я уже просматривал это post Kerberos - Не удается найти ключ соответствующего типа для расшифровки AP REP - RC4 с HMA C

И следующей ссылкой: https://bugs.openjdk.java.net/browse/JDK-8193855

и многие другие посты, но безуспешно.

...