在 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 匯出憑證

  1. 在 Google Chrome 中,瀏覽至 chrome://certificate-manager/
  2. 在**本機憑證**下,選擇**檢視匯入的憑證**。
  3. 尋找 Zscaler 根憑證,通常標示為**Zscaler 根 CA**。
  4. 開啟憑證詳細資訊,然後選擇**匯出**。
  5. 以 ASCII PEM 格式儲存憑證。
  6. 在文字編輯器中開啟匯出的檔案,確認它包含 -----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 操作。