将 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>
    ...
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.