Java 17 Разрешить RC4 HMAC, сохраняя при этом значениеallow_weak_crypto как false в krb5.conf

Система единого входа перестала работать в нашем приложении Spring. поскольку мы обновились до Java 17 с обновленными библиотеками Spring. Во время аутентификации я получаю следующую ошибку, связанную с тем, что Java 17 отключил RC4.

У меня SSO работает нормально, только если я устанавливаю для параметраallow_weak_crypto значение «true». Я ищу пользовательские настройки, чтобы SSO работал без установки дляallow_weak_crypto значения «true».

Я попробовал ниже, но безуспешно, есть ли у вас какие-либо предложения?

Caused by: sun.security.krb5.KrbException: Encryption type RC4 with HMAC is not supported/enabled
        at java.security.jgss/sun.security.krb5.EncryptionKey.findKey(EncryptionKey.java:544) ~[java.security.jgss:na]
        at java.security.jgss/sun.security.krb5.KrbApReq.authenticate(KrbApReq.java:273) ~[java.security.jgss:na]
        at java.security.jgss/sun.security.krb5.KrbApReq.<init>(KrbApReq.java:149) ~[java.security.jgss:na]
        at java.security.jgss/sun.security.jgss.krb5.InitSecContextToken.<init>(InitSecContextToken.java:139) ~[java.security.jgss:na]
        at java.security.jgss/sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:837) ~[java.security.jgss:na]



default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 des3-cbc-sha1 camellia256-cts-cmac camellia128-cts-cmac des-cbc-crc des-cbc-md5 des-cbc-md4 rc4 arcfour-hmac rc4-hmac arcfour-hmac-md5 arcfour-hmac-exp rc4-hmac-exp arcfour-hmac-md5-exp
default_tgs_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 des3-cbc-sha1 camellia256-cts-cmac camellia128-cts-cmac des-cbc-crc des-cbc-md5 des-cbc-md4 rc4 arcfour-hmac rc4-hmac arcfour-hmac-md5 arcfour-hmac-exp rc4-hmac-exp arcfour-hmac-md5-exp
permitted_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 des3-cbc-sha1 camellia256-cts-cmac camellia128-cts-cmac des-cbc-crc des-cbc-md5 des-cbc-md4 rc4 arcfour-hmac rc4-hmac arcfour-hmac-md5 arcfour-hmac-exp rc4-hmac-exp arcfour-hmac-md5-exp
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
384
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Разрешить RC4 HMAC, сохраняя при этом значениеallow_weak_crypto как false

Не делай этого. Это противоречивое требование, поскольку rc4-hmac буквально означает «слабая криптовалюта».

KrbException: тип шифрования RC4 с HMAC не поддерживается/включен.

Когда вы получаете это сообщение, это означает, что либо у службы, либо у клиента доступны только слабые ключи, но решение состоит не в том, чтобы разрешить использование слабых ключей, а в том, чтобы добавить надежные ключи.

  1. Я бы сначала удалил настройки, связанные с enctype, из krb5.conf. Я не уверен, нужны ли они для Java Kerberos, но они определенно не нужны ни для MIT Kerberos, ни для Heimdal Kerberos.

  2. Затем запустите klist -ket <file> на вкладке ключей вашего сервиса, чтобы проверить, какие у вас есть служебные ключи. Если в списке нет AES — поменяйте пароль сервисной учетной записи, повторно введите keytab, а затем попросите пользователя запустить klist purge (Windows) или kinit -R (Linux), чтобы сбросить все старые билеты, которые у него могут быть.

  3. Затем, если вы используете AD, проверьте учетную запись AD службы, чтобы убедиться, что в дополнительных настройках учетной записи установлены флажки «Включить AES128» и «Включить AES256». (Это соответствует msDS-SupportedEncryptionTypes из 28.) Если были внесены изменения, пользователь снова должен сбросить свои билеты.

  4. Наконец, если это не помогло (или если у вашей службы уже были ключи AES), измените пароль клиента, чтобы KDC сохранял новые ключи для учетной записи пользователя.

    (При использовании AD флажки «Включить AES» не нужны для клиентских учетных записей — клиентская система уже сообщает KDC, какие типы шифрования она поддерживает, поэтому AD KDC просто всегда сохраняет все типы ключей.)

Другие вопросы по теме

Могу ли я иметь секреты, срок действия которых не истекает в системе единого входа Microsoft через Azure Microsoft Entra ID?
Конфигурация Zabbix SAML с использованием ActiveDirectory WIN 2016-ADFS
Интеграция Moodle с ADFS — подключаемый модуль SAML2 Единый вход
Как включить Token_ID в новом интерфейсе Azure/Microsoft Entra
Okta SSO (разрешение другим пользователям из другой организации использовать единый вход с приложением OpenID, которое я создал на своей панели разработчика Okta)
Почему секрет клиента требуется при настройке единого входа Azure AD/Identity в Asp.net (устаревшая версия .Net Framework), но не требуется в ядре asp.net?
Получение отказа в доступе для всех маршрутов (с помощью PermitAll() ) в Vaadin 24 и Azure SSO
Python – реализация единого входа Authentik на веб-сервере с использованием Request_oauthlib
Самый простой способ разработки провайдера OIDC в ​​.NET Framework
Запретить пользователям входить в систему с их именем пользователя и паролем Snowflake