將 CA 證書與 Docker 結合使用

警告

在生產容器中使用中間人(MITM)CA 證書時,應遵循最佳實踐。如果受到攻擊,攻擊者可能會攔截敏感資料、仿冒受信任的服務或執行中間人攻擊。在繼續操作前,請諮詢您的安全團隊。

如果您的公司使用檢查 HTTPS 流量的代理,您可能需要將所需的根證書新增到您的主機和 Docker 容器或映象中。這是因為 Docker 及其容器在拉取映象或發出網路請求時,需要信任代理的證書。

在主機上,新增根證書可以確保任何 Docker 命令(如 docker pull)都能正常工作。對於容器,您需要在構建過程或執行時將根證書新增到容器的信任儲存中。這可以確保容器內執行的應用程式能夠透過代理進行通訊,而不會遇到安全警告或連線失敗。

將 CA 證書新增到主機

以下各節介紹瞭如何在 macOS 或 Windows 主機上安裝 CA 證書。對於 Linux,請參閱您所用發行版的文件。

macOS

  1. 下載您的 MITM 代理軟體的 CA 證書。
  2. 開啟 鑰匙串訪問 應用程式。
  3. 在“鑰匙串訪問”中,選擇系統,然後切換到證書選項卡。
  4. 將下載的證書拖放到證書列表中。如果出現提示,請輸入您的密碼。
  5. 找到新新增的證書,雙擊它,然後展開信任部分。
  6. 為該證書設定始終信任。如果出現提示,請輸入您的密碼。
  7. 啟動 Docker Desktop 並驗證 docker pull 是否正常工作,前提是 Docker Desktop 已配置為使用 MITM 代理。

Windows

選擇您是想使用 Microsoft 管理控制檯(MMC)還是 Web 瀏覽器來安裝證書。

  1. 下載 MITM 代理軟體的 CA 證書。
  2. 開啟 Microsoft 管理控制檯 (mmc.exe)。
  3. 在 MMC 中新增證書管理單元
    1. 選擇檔案新增/刪除管理單元,然後選擇證書新增 >
    2. 選擇計算機帳戶,然後選擇下一步
    3. 選擇本地計算機,然後選擇完成
  4. 匯入 CA 證書
    1. 在 MMC 中,展開證書 (本地計算機)
    2. 展開受信任的根證書頒發機構部分。
    3. 右鍵單擊證書並選擇所有任務匯入…
    4. 按照提示匯入您的 CA 證書。
  5. 選擇完成,然後選擇關閉
  6. 啟動 Docker Desktop 並驗證 docker pull 是否成功(假設 Docker Desktop 已配置為使用 MITM 代理伺服器)。
注意

根據所使用的 SDK 和/或執行時/框架,除了將 CA 證書新增到作業系統的信任儲存外,可能還需要執行其他步驟。

  1. 下載您的 MITM 代理軟體的 CA 證書。
  2. 開啟您的 Web 瀏覽器,轉到設定並開啟管理證書
  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 等)。

向正在執行的 Linux 容器新增 CA 證書

  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>
    ...