在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)或您的网页浏览器安装证书。


  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-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格式:

    Example command
    $ 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
    
    Example output
    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
    
    Example output
    <!doctype html>
    <html>
    <head>
        <title>Example Domain</title>
    ...