在 Docker 中使用 CA 证书

注意

在生产容器中使用中间人(MITM)CA证书时,应遵循最佳实践。如果证书被泄露,攻击者可能会拦截敏感数据、冒充可信服务或执行中间人攻击。在继续操作之前,请咨询您的安全团队。

如果您的公司使用检查 HTTPS 流量的代理,您可能需要将所需的根证书添加到您的主机和 Docker 容器或镜像中。这是因为 Docker 及其容器在拉取镜像或发起网络请求时,需要信任代理的证书。

在主机上,添加根证书可以确保任何 Docker 命令(如 docker pull)都能正常运行。对于容器,您需要在构建过程中或运行时将根证书添加到容器的信任存储中。这可以确保容器内运行的应用程序能够通过代理进行通信,而不会遇到安全警告或 连接失败。

将 CA 证书添加到主机

以下部分介绍了如何在 macOS 或 Windows 主机上安装 CA 证书。对于 Linux,请参考您发行版的文档。

macOS

  1. 下载您的MITM代理软件的CA证书。
  2. 打开 Keychain Access 应用程序。
  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. 打开您的网络浏览器,转到 设置 并打开 管理证书
  3. 选择 受信任的根证书颁发机构 选项卡。
  4. 选择 导入,然后浏览已下载的 CA 证书。
  5. 选择 打开,然后选择 将所有证书放入下列存储
  6. 确保选中受信任的根证书颁发机构,然后选择下一步
  7. 选择 命令补全,然后选择 关闭
  8. 启动 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-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>
    ...