Как добавить много SSL-сертификатов для Java-приложения в Docker? - PullRequest
0 голосов
/ 03 июня 2019

Я новичок в докере. Я хочу добавить несколько сертификатов для Java-приложения в Docker. Я использую этот код в Dockerfile:

RUN keytool -importcert -noprompt -trustcacerts -alias artifactory -file /files/cert.crt -keystore local -storepass changeit

и работает нормально, но только для одного сертификата. Как я могу добавить все сертификаты из папки / files с помощью одной строковой команды или в каком-то цикле или, может быть, с помощью bash-файла?

ОБНОВЛЕНО: я использовал следующий bash для добавления сертификатов:

for cert in ${tempdir}/*.crt; do
cert2=$(basename $cert)
echo "# ${cert2}" >> ${destdir}/${cert2}
${openssl} x509 -inform der -in ${cert} -outform pem -out ${destdir}/${cert2}
keytool -importcert -noprompt -trustcacerts -alias artifactory -file /${destdir}/${cert2} -keystore local -storepass changeit
done

но получил следующую ошибку: "keytool: команда не найдена". Команда keytool отлично работает, когда я запускаю ее в контейнере Docker.

Ответы [ 3 ]

0 голосов
/ 03 июня 2019

Я понимаю, что вы хотите автоматизировать импорт нескольких сертификатов.Вы можете сделать это, перебирая файлы с помощью bash.

Как здесь описано, вы можете искать файлы, находя и обрабатывая результат.

Как перебирать имена файловвозвращено find?

Для этого вы можете написать свою команду keytool в своем собственном скрипте bash и отправить результат команды find в ваш скрипт, например,

find . -name *.crt -print0 | xargs -0 myImportScript.sh

Если вы выполнили это, вы можете сделать скрипт импорта доступным, например, по символической ссылке, и позволить docker ВЫПОЛНИТЬ команду, указанную выше.

0 голосов
/ 03 июня 2019

В bash-файле вызова dockerfile:

RUN apk update && apk add bash openssl wget && rm -rf /var/cache/apk/*
COPY getcerts.sh getcerts.sh
RUN chmod +x getcerts.sh && ./getcerts.sh

Скрипт Bash:

for cert in ${tempdir}/*.crt; do
keytool -importcert -noprompt -trustcacerts -alias artifactory-${cert2} -file /${destdir}/${cert2} -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit
done
0 голосов
/ 03 июня 2019

вы можете создать хранилище ключей.Но рекомендуется использовать хранилище ключей по умолчанию. путь хранилища ключей по умолчанию: <c:\JavaCAPS>\appserver\domains\<MyDomain>\config\keystore.jks

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

Создать хранилище ключей Java и пару ключей

keytool -genkey -alias mydomain -keyalg RSA -keystore keystore.jks -keysize 2048

Импорт корневого или промежуточного сертификата CA в существующее хранилище ключей Java

keytool -import -trustcacerts -alias root -file Thawte.crt -keystore keystore.jks

Импортподписанный первичный сертификат в существующем хранилище ключей Java

keytool -import -trustcacerts -alias mydomain -file mydomain.crt -keystore keystore.jks

Программно сохраняющий симметричный ключ

KeyStore.SecretKeyEntry secret = new KeyStore.SecretKeyEntry(secretKey);
KeyStore.ProtectionParameter password = new KeyStore.PasswordProtection(pwdArray);
ks.setEntry("db-encryption-secret", secret, password);

первый параметрпсевдоним ключа, второй параметр - ключ сертификата, а третий - пароль.

подробнее: https://docs.oracle.com/cd/E19509-01/820-3503/ggfen/index.html https://www.sslshopper.com/article-most-common-java-keytool-keystore-commands.html

...