在 Docker 中使用 Zscaler
在許多企業環境中,網路流量會使用 HTTPS 代理(例如 Zscaler)進行攔截和監控。雖然 Zscaler 可確保安全性合規性和網路控制,但它可能會對使用 Docker 的開發人員造成問題,尤其是在建置過程中,可能會發生 SSL 憑證驗證錯誤。本指南概述如何設定 Docker 容器和建置以正確處理 Zscaler 的自訂憑證,確保在受監控的環境中順利運作。
憑證在 Docker 中的角色
當 Docker 建置或執行容器時,它通常需要從網際網路擷取資源,無論是從登錄檔提取基礎映像檔、下載依賴項,還是與外部服務通訊。在代理環境中,Zscaler 會攔截 HTTPS 流量,並將遠端伺服器的憑證替換為自己的憑證。但是,Docker 預設不信任此 Zscaler 憑證,導致 SSL 錯誤。
x509: certificate signed by unknown authority
發生這些錯誤是因為 Docker 無法驗證 Zscaler 呈現的憑證的有效性。為避免這種情況,您必須將 Docker 設定為信任 Zscaler 的憑證。
為 Docker Desktop 設定 Zscaler 代理
根據 Zscaler 的部署方式,您可能需要手動設定 Docker Desktop 代理設定以使用 Zscaler 代理。
如果您透過 Zscaler Client Connector 將 Zscaler 用作系統級代理,則裝置上的所有流量都會自動透過 Zscaler 路由,因此 Docker Desktop 會自動使用 Zscaler 代理,無需額外設定。
如果您未使用 Zscaler 作為系統級代理,請在 Docker Desktop 中手動設定代理設定。使用 設定管理 為組織中的所有用戶端設定代理設定,或在 Docker Desktop GUI 中的 設定 > 資源 > 代理 下編輯代理設定。
在 Docker 映像檔中安裝根憑證
要讓容器能夠使用和信任 Zscaler 代理,請將憑證嵌入映像檔並設定映像檔的信任存放區。在映像檔建置期間安裝憑證是首選方法,因為它消除了啟動期間設定的需要,並提供可稽核、一致的環境。
取得根憑證
取得根憑證最簡單的方法是從已由管理員安裝憑證的機器匯出它。您可以使用網路瀏覽器或系統的憑證管理服務(例如,Windows 憑證存放區)。
範例:使用 Google Chrome 匯出憑證
- 在 Google Chrome 中,瀏覽至
chrome://certificate-manager/
。 - 在**本機憑證**下,選擇**檢視匯入的憑證**。
- 尋找 Zscaler 根憑證,通常標示為**Zscaler 根 CA**。
- 開啟憑證詳細資訊,然後選擇**匯出**。
- 以 ASCII PEM 格式儲存憑證。
- 在文字編輯器中開啟匯出的檔案,確認它包含
-----BEGIN CERTIFICATE-----
和-----END CERTIFICATE-----
。
取得憑證後,將其儲存在可存取的儲存庫中,例如 JFrog Artifactory 或 Git 儲存庫。或者,使用 AWS S3 等通用儲存空間。
使用憑證建置
要在建置映像檔時安裝這些憑證,請將憑證複製到建置容器中並更新信任存放區。Dockerfile 範例如下所示
FROM debian:bookworm
COPY zscaler-cert.pem /usr/local/share/ca-certificates/zscaler-cert.pem
RUN apt-get update && \
apt-get install -y ca-certificates && \
update-ca-certificates
這裡,`zscaler-cert.pem` 是根憑證,位於建置環境的根目錄(通常在應用程式的 Git 儲存庫中)。
如果您使用構件庫,您可以使用 ADD
指令直接提取憑證。您也可以使用 --checksum
旗標來驗證憑證的內容摘要是否正確。
FROM debian:bookworm
ADD --checksum=sha256:24454f830cdb571e2c4ad15481119c43b3cafd48dd869a9b2945d1036d1dc68d \
https://artifacts.example/certs/zscaler-cert.pem /usr/local/share/ca-certificates/zscaler-cert.pem
RUN apt-get update && \
apt-get install -y ca-certificates && \
update-ca-certificates
使用多階段建置
對於需要在最終執行階段映像中使用憑證的多階段建置,請確保在最後階段安裝憑證。
FROM debian:bookworm AS build
WORKDIR /build
RUN apt-get update && apt-get install -y \
build-essential \
cmake \
curl \
git
RUN --mount=target=. cmake -B output/
FROM debian:bookworm-slim AS final
ADD --checksum=sha256:24454f830cdb571e2c4ad15481119c43b3cafd48dd869a9b2945d1036d1dc68d \
https://artifacts.example/certs/zscaler-cert.pem /usr/local/share/ca-certificates/zscaler-cert.pem
RUN apt-get update && \
apt-get install -y ca-certificates && \
update-ca-certificates
WORKDIR /app
COPY --from=build /build/output/bin .
ENTRYPOINT ["/app/bin"]
結論
將 Zscaler 根憑證直接嵌入到您的 Docker 映像中,可確保容器在 Zscaler 代理環境中順利運行。透過這種方法,您可以減少潛在的執行階段錯誤,並建立一致且可稽核的配置,以便在受監控的網路中順利執行 Docker 操作。