Ssl

如何處理 Dockerfile 中的證書

  • July 18, 2019

我正在編寫一個基於 maven:3.6.0-jdk-11-slim 的 Docker 映像,以與我們的 Jenkins Pipeline 集成。我在一個防火牆後面的公司環境中工作,我需要添加證書才能從我們的 Nexus 伺服器下載必要的依賴項。

但是,由於 Docker 在將文件複製到映像時僅允許使用相對路徑,因此我需要將 ca.crt 提供在與 Dockerfile 相同的目錄中,從而將所有內容送出給 SCM,我對此並不感到興奮。

我是否過於謹慎而不想送出我們的 ca-cert?或者是否有一種解決方法可以讓我使用建構伺服器上已經存在的證書?

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是公鑰證書,則根據定義它是公共的,並且它不包含任何允許模擬具有相應私鑰證書的伺服器的資訊。所以將文件添加到 repo 是安全的,但是……有一個更好的解決方案:

從伺服器動態獲取公鑰證書。使用以下命令,您可以獲得簽署證書的 CA 的“自簽名證書”的公鑰:

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 映像時,CA 的證書都會“刷新”。

引用自:https://serverfault.com/questions/975775