Назад | Перейти на главную страницу

Как обрабатывать сертификаты в Dockerfile

Я пишу образ 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 содержит сертификат открытого ключа.

Таким образом, всякий раз, когда вы создаете образ докера, сертификат ЦС «обновляется».