Como lidar com certificados no Dockerfile

Estou escrevendo uma imagem Docker baseada em maven: 3.6.0-jdk-11-slim para integrar com nosso Pipeline Jenkins. Estou trabalhando em um ambiente corporativo que está por trás de um firewall bastante apertado e preciso adicionar certificados para baixar as dependências necessárias do nosso servidor Nexus.

No entanto, como o Docker permite apenas caminhos relativos ao copiar arquivos para a imagem, eu precisaria fornecer a ca.crt no mesmo diretório que o Dockerfile e, portanto, comprometer tudo para SCM que eu não estou entusiasmado.

Estou sendo muito cauteloso em não querer cometer nosso certificado? Ou há uma solução alternativa que me permita usar o certificado que já existe no servidor de compilação?

Dockerfile para referência:

## 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

ISENCAO Não tenho certeza se este é o fórum correto para fazer essa pergunta, então terei prazer em movê-lo se não.

Se o ca.crt é o certificado de chave pública é, por definição, público e não contém nenhuma informação que permita personificar o servidor que possui o certificado de chave privada correspondente. Portanto, é Seguro adicionar o arquivo ao repo, mas... existe uma solução melhor:

Obtenha dinamicamente o certificado de chave pública do servidor.Com o seguinte comando, você pode obter a chave pública do "certificado autoassinado" da CA que assinou o certificado:

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

Arquivo ca.crt contém o certificado de chave pública.

Dessa forma, sempre que você cria a imagem do docker, o certificado da CA é "atualizado".