將 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 客戶端聯結器 將 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 Root CA
  4. 開啟證書詳情並選擇匯出
  5. 以 ASCII PEM 格式儲存證書。
  6. 在文字編輯器中開啟匯出的檔案,確認它包含 -----BEGIN CERTIFICATE----------END CERTIFICATE-----

獲取證書後,請將其儲存在可訪問的倉庫中,例如 JFrog Artifactory 或 Git 倉庫。或者,也可以使用通用儲存,如 AWS S3。

使用證書進行構建

要在構建映象時安裝這些證書,請將證書複製到構建容器中並更新信任儲存。一個示例 Dockerfile 如下:

FROM debian:bookworm
COPY zscaler-root-ca.crt /usr/local/share/ca-certificates/zscaler-root-ca.crt
RUN apt-get update && \
    apt-get install -y ca-certificates && \
    update-ca-certificates

在這裡,zscaler-root-ca.crt 是根證書,位於構建上下文的根目錄(通常在應用程式的 Git 倉庫內)。

如果你使用製品倉庫,可以直接使用 ADD 指令獲取證書。你還可以使用 --checksum 標誌來驗證證書的內容摘要是否正確。

FROM debian:bookworm
ADD --checksum=sha256:24454f830cdb571e2c4ad15481119c43b3cafd48dd869a9b2945d1036d1dc68d \
    https://artifacts.example/certs/zscaler-root-ca.crt /usr/local/share/ca-certificates/zscaler-root-ca.crt
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-root-ca.crt /usr/local/share/ca-certificates/zscaler-root-ca.crt
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 的順暢操作。