Здравствуйте.
В OpenShift планируется развернуть микросервис, написанный с использованием Spring Boot и JCP 2.0.40035 - была установлена локально на машине с Win10(x64) и JDK 1.8 (OpenJDK 1.8.0_232).
В начальной версии сервиса предполагается только проверка прикреплённых подписей PKCS#7 (в следующих версиях планируется ещё и подписывать данные). Для этого используется библиотека CAdES (блоки кода взяты из примеров по этой библиотеке, приложенных к дистрибутиву JCP).
Локально всё работает корректно, но с созданием Docker образа возникли некоторые проблемы, а с ними ряд вопросов:
1. Организация планирует закупить несколько серверных лицензий КриптоПро JCP (по одной для каждого стенда). Верно ли понимаю, что одна серверная лицензия нужна на один pod OpenShift-а (при этом ограничения на количество ядер нет)?
2. На
форуме прочитал, что корневые сертификаты, в случае использования JCP без модуля cpSSL.jar для TLS, нужно добавлять только в хранилище доверенных сертификатов Java - cacerts ($JAVA_HOME/jre/lib/security/cacerts). При локальном тестировании сервиса добавлял их в cacerts (как описано в "Руководстве программиста") с помощью утилиты keytool. Теперь возник вопрос - для обновления корневых (сертификат подписи тоже туда добавлял) сертификатов нужно будет каждый раз пересобирать Docker образ? Т.е. для обновления сертификатов в cacerts придётся пересобирать образ? Если можно, то пожалуйста объясните этот момент.
3. Примерно такой же вопрос по CRL (файлам списков отозванных сертификатов). Локально в настройках сервиса была указана папка, куда складывались CRL файлы (онлайн проверка CRL отключена). Подозреваю, что можно указать папку в файловой системе Unix, на которой работает pod и в ней обновлять CRL. Как это лучше организовать при развёртывании сервиса в OpenShift?
4. Ну и вопрос по установке JCP при сборке Docker образа. Локально установил JCP с GUI из setup.exe. Прочитал в "Инструкции по использованию" про установку в Unix вызовом "./setup_console.sh <путь_к_JRE>" и установку вызовом Java "java -classpath JCPinst.jar ru.CryptoPro.Install.VariantTwo" с указанием необходимых модулей. Какой вариант предпочтительней при сборке Docker образа? Базовый образ с OpenJDK будет, естественно, на основе терминального Unix.
Пока выделил для себя следующие шаги:
# Базовый образ Alpine (для примера) c JDK
FROM openjdk:8-jdk-alpine
# Копируем дистрибутив JCP в папку ./distrib
# Запускаем установку JCP из папки ./distrib
# После установки копируем в JRE из дистрибутива зависимости bouncucastle (для CAdES)
# Добавляем сертификат(ы) (корневой) в cacerts
RUN keytool -import -alias root -provider ru.CryptoPro.JCP.JCP -keystore /usr/lib/jvm/java-8-openjdk/jre/lib/security/cacerts -storepass changeit -file c:\root.crt