Использование Keycloak с JDK, совместимым с FIPS - PullRequest
1 голос
/ 18 марта 2020

У меня есть требование для создания 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))]

Может кто-нибудь указать мне на решение?

1 Ответ

0 голосов
/ 20 марта 2020

Я не знаю, есть ли канонический ответ на это, но я закончил эту работу, зарегистрировав свои модули как явные зависимости root модуля org.jboss.as.server в файле $KEYCLOAK_ROOT/modules/system/layers/base/org/jboss/as/server/main/module.xml.

...