將 CA 證書與 Docker 結合使用
警告在生產容器中使用中間人(MITM)CA 證書時,應遵循最佳實踐。如果受到攻擊,攻擊者可能會攔截敏感資料、仿冒受信任的服務或執行中間人攻擊。在繼續操作前,請諮詢您的安全團隊。
如果您的公司使用檢查 HTTPS 流量的代理,您可能需要將所需的根證書新增到您的主機和 Docker 容器或映象中。這是因為 Docker 及其容器在拉取映象或發出網路請求時,需要信任代理的證書。
在主機上,新增根證書可以確保任何 Docker 命令(如 docker pull
)都能正常工作。對於容器,您需要在構建過程或執行時將根證書新增到容器的信任儲存中。這可以確保容器內執行的應用程式能夠透過代理進行通訊,而不會遇到安全警告或連線失敗。
將 CA 證書新增到主機
以下各節介紹瞭如何在 macOS 或 Windows 主機上安裝 CA 證書。對於 Linux,請參閱您所用發行版的文件。
macOS
- 下載您的 MITM 代理軟體的 CA 證書。
- 開啟 鑰匙串訪問 應用程式。
- 在“鑰匙串訪問”中,選擇系統,然後切換到證書選項卡。
- 將下載的證書拖放到證書列表中。如果出現提示,請輸入您的密碼。
- 找到新新增的證書,雙擊它,然後展開信任部分。
- 為該證書設定始終信任。如果出現提示,請輸入您的密碼。
- 啟動 Docker Desktop 並驗證
docker pull
是否正常工作,前提是 Docker Desktop 已配置為使用 MITM 代理。
Windows
選擇您是想使用 Microsoft 管理控制檯(MMC)還是 Web 瀏覽器來安裝證書。
- 下載 MITM 代理軟體的 CA 證書。
- 開啟 Microsoft 管理控制檯 (
mmc.exe
)。 - 在 MMC 中新增證書管理單元。
- 選擇檔案 → 新增/刪除管理單元,然後選擇證書 → 新增 >。
- 選擇計算機帳戶,然後選擇下一步。
- 選擇本地計算機,然後選擇完成。
- 匯入 CA 證書
- 在 MMC 中,展開證書 (本地計算機)。
- 展開受信任的根證書頒發機構部分。
- 右鍵單擊證書並選擇所有任務和匯入…。
- 按照提示匯入您的 CA 證書。
- 選擇完成,然後選擇關閉。
- 啟動 Docker Desktop 並驗證
docker pull
是否成功(假設 Docker Desktop 已配置為使用 MITM 代理伺服器)。
注意根據所使用的 SDK 和/或執行時/框架,除了將 CA 證書新增到作業系統的信任儲存外,可能還需要執行其他步驟。
- 下載您的 MITM 代理軟體的 CA 證書。
- 開啟您的 Web 瀏覽器,轉到設定並開啟管理證書
- 選擇受信任的根證書頒發機構選項卡。
- 選擇匯入,然後瀏覽找到已下載的 CA 證書。
- 選擇開啟,然後選擇將所有證書都放入下列儲存區。
- 確保已選擇受信任的根證書頒發機構,然後選擇下一步。
- 選擇完成,然後選擇關閉。
- 啟動 Docker Desktop 並驗證
docker pull
是否成功(假設 Docker Desktop 已配置為使用 MITM 代理伺服器)。
將 CA 證書新增到 Linux 映象和容器
如果您需要執行依賴於內部或自定義證書的容器化工作負載(例如在有公司代理或安全服務的環境中),您必須確保容器信任這些證書。如果不新增必要的 CA 證書,您容器內的應用程式在嘗試連線到 HTTPS 端點時可能會遇到請求失敗或安全警告。
透過在構建時向映象新增 CA 證書,您可以確保從該映象啟動的任何容器都將信任指定的證書。這對於需要在生產期間無縫訪問內部 API、資料庫或其他服務的應用程式尤為重要。
如果重建映象不可行,您可以改為直接向容器新增證書。但是,在執行時新增的證書在容器被銷燬或重新建立時不會持久化,因此這種方法通常用於臨時修復或測試場景。
將證書新增到映象
注意以下命令適用於 Ubuntu 基礎映象。如果您的構建使用不同的 Linux 發行版,請使用等效的包管理命令(
apt-get
、update-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-get
、update-ca-certificates
等)。
向正在執行的 Linux 容器新增 CA 證書
下載您的 MITM 代理軟體的 CA 證書。
如果證書格式不是
.crt
,請將其轉換為.crt
格式示例命令$ openssl x509 -in cacert.der -inform DER -out myca.crt
將證書複製到正在執行的容器中
$ docker cp myca.crt <containerid>:/tmp
附加到容器
$ docker exec -it <containerid> sh
確保已安裝
ca-certificates
包(更新證書所需)# apt-get update && apt-get install -y ca-certificates
將證書複製到 CA 證書的正確位置
# cp /tmp/myca.crt /usr/local/share/ca-certificates/root_cert.crt
更新 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.
驗證容器是否可以透過 MITM 代理進行通訊
# curl https://example.com
示例輸出<!doctype html> <html> <head> <title>Example Domain</title> ...