Как обрабатывать сертификаты в 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-slimCOPY ca.crt /usr/local/share/ca-certificatesRUN update-ca-certificatesCOPY pom.xml /tmp/pom.xmlCOPY settings.xml /usr/share/maven/ref/settings.xmlRUN 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 содержит сертификат открытого ключа.

Таким образом, всякий раз, когда вы создаете образ docker, сертификат центра сертификации "обновляется".