将 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 Management Console (MMC) 还是网络浏览器安装证书。


  1. 下载 MITM 代理软件的 CA 证书。
  2. 打开 Microsoft Management Console (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-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>
    ...
页面选项