У меня есть требование для создания Docker образа с Keycloak и FIPS-совместимым JDK (на основе OpenJDK 8).
В моей компании есть внутренний дистрибутив JDK FIPS, который работает примерно так:
В каталоге -Djava.endorsed.dirs
установлен поставщик безопасности, который отправляет все вызовы безопасности в BouncyCastle. У этого провайдера безопасности есть зависимости, которые я получаю через Maven: несколько банок BouncyCastle, а также другие вещи, такие как Джексон, Scala, Гуава, кухонная раковина.
Я делаю mvn dependency:copy-dependencies
, чтобы скопировать банки BouncyCastle в папку библиотеки, и я использую плагин Maven Shade для создания UberJar со всем остальным, за исключением того, что уже присутствует в Keycloak. Чтобы предотвратить конфликты, я применяю затенение пакетов в этом UberJar (пакет com.foo
перемещен в myteam.com.foo
), за исключением точки входа publi c, на которую ссылается вышеуказанный поставщик безопасности.
У меня немного Java Тестовый класс, который проверяет эту настройку, работает в FIPS-совместимом режиме, в основном тест состоит в том, что
MessageDigest.getInstance("SHA-256", "SUN").getProvider().getName()
возвращает BCFIPS
вместо SUN
, и это работает.
Теперь мой проблема в том, как заставить эту настройку работать на Keycloak, учитывая, что она работает на JBoss / WildFly и имеет свои собственные идеи по загрузке классов.
Я запускаю Keycloak с параметром -Djava.endorsed.dirs
в моем JAVA_OPTS
, который оставляет зависимости BouncyCastle и другим библиотекам.
Я попробовал следующие подходы
Подход 1: Объявить все как модуль. Внутри /opt/jboss/keycloak/modules/system/layers/keycloak
(или base
, я пробовал оба) объявить модуль org/bouncycastle
со всеми банками b c и com/mycompany module
с UberJar. Зарегистрируйте оба как глобальные модули (K C в настоящее время работает на WildFly 18, поэтому опция глобальных каталогов пока недоступна)
Подход 2: Поместите все jar-файлы в каталог и указывает, что использование -Djava.ext.dirs
в моем JAVA_OPTS
.
Каждое из них привело к одинаковому сообщению об ошибке:
Причина: java. lang.ClassNotFoundException: org. / jboss / keycloak / modules, / opt / jboss / keycloak / modules / system / слои / keycloak, / opt / jboss / keycloak / modules / system / layer / base))]
Может кто-нибудь указать мне на решение?