Я пишу образ Docker на основе maven: 3.6.0-jdk-11-slim для интеграции с нашим конвейером Jenkins. Я работаю в корпоративной среде, защищенной довольно жестким брандмауэром, и мне нужно добавить сертификаты, чтобы загрузить необходимые зависимости с нашего сервера Nexus.
Однако, поскольку Docker допускает только относительные пути при копировании файлов в образ, мне нужно было бы предоставить ca.crt в том же каталоге, что и Dockerfile, и, таким образом, передать все в SCM, что меня не в восторге.
Я слишком осторожен, не желая выполнять наш сертификат? Или есть обходной путь, который позволил бы мне использовать сертификат, который уже существует на сервере сборки?
Dockerfile для справки:
#
# Build Stage
#
FROM maven:3.6.0-jdk-11-slim
COPY ca.crt /usr/local/share/ca-certificates
RUN update-ca-certificates
COPY pom.xml /tmp/pom.xml
COPY settings.xml /usr/share/maven/ref/settings.xml
RUN mvn -f /tmp/pom.xml -X -s /usr/share/maven/ref/settings.xml clean package
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ Я не уверен, что это правильный форум, чтобы задать этот вопрос, поэтому я с радостью перенесу его, если нет.
Если ca.crt
является сертификатом открытого ключа, он по определению является открытым и не содержит никакой информации, позволяющей имитировать сервер, имеющий соответствующий сертификат закрытого ключа. Так что добавить файл в репо безопасно, но ... есть лучшее решение:
Получить динамически сертификат открытого ключа с сервера. С помощью следующей команды вы можете получить открытый ключ «самоподписанного сертификата» центра сертификации, подписавшего сертификат:
echo quit | openssl s_client -showcerts -servername example.com -connect example.com:443 2>/dev/null | awk '/BEGIN/,/END/{ if(/BEGIN/){c=""};c=c $0 "\n"}END{print c}' >ca.crt || true
файл ca.crt
содержит сертификат открытого ключа.
Таким образом, всякий раз, когда вы создаете образ докера, сертификат ЦС «обновляется».