在 Docker 中使用 CA 憑證

注意

在生產環境容器中使用中間人 (MITM) CA 憑證時,應遵循最佳實作。若遭入侵,攻擊者可能會攔截敏感資料、偽造受信任服務或執行中間人攻擊。請在執行前諮詢您的安全性團隊。

若貴公司使用會檢查 HTTPS 流量的代理伺服器,您可能需要將必要的根憑證新增至主機與 Docker 容器或映像檔中。這是因為 Docker 及其容器在提取映像檔或進行網路請求時,必須信任該代理伺服器的憑證。

在主機上,新增根憑證可確保所有 Docker 指令(例如 docker pull)皆能正常運作。對於容器,您需要在建置過程或執行階段將根憑證新增至容器的信任存放區。這可確保在容器內運行的應用程式能夠透過代理伺服器進行通訊,而不會遇到安全性警告或連線失敗。

將 CA 憑證新增至主機

下列章節說明如何將 CA 憑證安裝至您的 macOS 或 Windows 主機。關於 Linux,請參閱您發行版的說明文件。

macOS

  1. 下載適用於您的 MITM 代理軟體的 CA 憑證。
  2. 開啟鑰匙圈存取 (Keychain Access) 應用程式。
  3. 在鑰匙圈存取中,選擇系統 (System),然後切換至憑證 (Certificates) 標籤頁。
  4. 將下載的憑證拖放至憑證列表中。若系統提示,請輸入您的密碼。
  5. 找到剛新增的憑證,按兩下並展開信任 (Trust) 區段。
  6. 將憑證設為永遠信任 (Always Trust)。若系統提示,請輸入您的密碼。
  7. 啟動 Docker Desktop 並驗證 docker pull 是否運作正常(前提是 Docker Desktop 已設定為使用該 MITM 代理)。

Windows

選擇您要透過 Microsoft 管理主控台 (MMC) 還是網頁瀏覽器安裝憑證。

  1. 下載 MITM 代理軟體的 CA 憑證。
  2. 開啟 Microsoft 管理主控台 (mmc.exe)。
  3. 在 MMC 中新增憑證嵌入式管理單元 (Certificates Snap-In)
    1. 選擇檔案 (File)新增/移除嵌入式管理單元 (Add/Remove Snap-in),然後選擇憑證 (Certificates)新增 >
    2. 選擇電腦帳戶 (Computer Account),然後按下一步
    3. 選擇本機電腦 (Local computer),然後按完成
  4. 匯入 CA 憑證
    1. 在 MMC 中,展開憑證 (本機電腦)
    2. 展開受信任的根憑證授權單位 (Trusted Root Certification Authorities) 區段。
    3. 以右鍵點擊憑證,選擇所有工作匯入…
    4. 依照提示匯入您的 CA 憑證。
  5. 選擇完成,然後按關閉
  6. 啟動 Docker Desktop 並驗證 docker pull 是否成功(前提是 Docker Desktop 已設定為使用該 MITM 代理伺服器)。
注意

根據所使用的 SDK 和/或執行階段/框架,除了將 CA 憑證新增至作業系統的信任存放區外,可能還需要額外的步驟。

  1. 下載適用於您的 MITM 代理軟體的 CA 憑證。
  2. 開啟您的網頁瀏覽器,前往設定並開啟管理憑證
  3. 選擇受信任的根憑證授權單位標籤頁。
  4. 選擇匯入,然後瀏覽並選取下載的 CA 憑證。
  5. 選擇開啟,然後選擇將所有的憑證放入下列存放區
  6. 確保已選取受信任的根憑證授權單位,然後選擇下一步
  7. 選擇完成,然後按關閉
  8. 啟動 Docker Desktop 並驗證 docker pull 是否成功(前提是 Docker Desktop 已設定為使用該 MITM 代理伺服器)。

將 CA 憑證新增至 Linux 映像檔與容器

若您需要執行依賴內部或自訂憑證的容器化工作負載(例如在企業代理或安全服務環境中),您必須確保容器信任這些憑證。若未新增必要的 CA 憑證,容器內的應用程式在嘗試連線至 HTTPS 端點時,可能會遇到請求失敗或安全性警告。

透過在建置階段將 CA 憑證新增至映像檔,可確保從該映像檔啟動的所有容器都會信任指定的憑證。對於需要在生產環境中順暢存取內部 API、資料庫或其他服務的應用程式而言,這點尤為重要。

若無法重新建置映像檔,您可以改為直接將憑證新增至容器。然而,在執行階段新增的憑證在容器遭到刪除或重建後將不會保留,因此此方法通常用於暫時性的修正或測試場景。

將憑證新增至映像檔

注意

下列指令適用於 Ubuntu 基礎映像檔。若您的建置使用不同的 Linux 發行版,請使用對應的套件管理指令(例如 apt-getupdate-ca-certificates 等)。

若要在建置容器映像檔時新增 CA 憑證,請將下列指令新增至您的 Dockerfile。

# Install the ca-certificate package
RUN apt-get update && apt-get install -y ca-certificates
# Copy the CA certificate from the context to the build container
COPY your_certificate.crt /usr/local/share/ca-certificates/
# Update the CA certificates in the container
RUN update-ca-certificates

將憑證新增至容器

注意

下列指令適用於以 Ubuntu 為基礎的容器。若您的容器使用不同的 Linux 發行版,請使用對應的套件管理指令(例如 apt-getupdate-ca-certificates 等)。

將 CA 憑證新增至正在運行的 Linux 容器

  1. 下載適用於您的 MITM 代理軟體的 CA 憑證。

  2. 若憑證格式非 .crt,請先轉換為 .crt 格式

    指令範例
    $ openssl x509 -in cacert.der -inform DER -out myca.crt
    
  3. 將憑證複製到正在運行的容器中

    $ docker cp myca.crt <containerid>:/tmp
    
  4. 進入容器

    $ docker exec -it <containerid> sh
    
  5. 確保已安裝 ca-certificates 套件(更新憑證時必要)

    # apt-get update && apt-get install -y ca-certificates
    
  6. 將憑證複製到 CA 憑證的正確位置

    # cp /tmp/myca.crt /usr/local/share/ca-certificates/root_cert.crt
    
  7. 更新 CA 憑證

    # update-ca-certificates
    
    輸出範例
    Updating certificates in /etc/ssl/certs...
    rehash: warning: skipping ca-certificates.crt, it does not contain exactly one certificate or CRL
    1 added, 0 removed; done.
  8. 驗證容器是否能透過 MITM 代理進行通訊

    # curl https://example.com
    
    輸出範例
    <!doctype html>
    <html>
    <head>
        <title>Example Domain</title>
    ...
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.