将 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 Management Console (MMC) 还是网络浏览器安装证书。
- 下载 MITM 代理软件的 CA 证书。
- 打开 Microsoft Management Console (
mmc.exe
)。 - 在 MMC 中添加 证书管理单元。
- 选择 文件 → 添加/删除管理单元,然后选择 证书 → 添加 >。
- 选择 计算机账户,然后选择 下一步。
- 选择 本地计算机,然后选择 完成。
- 导入 CA 证书
- 在 MMC 中,展开 证书 (本地计算机)。
- 展开 受信任的根证书颁发机构 部分。
- 右键单击 证书,然后选择 所有任务 和 导入...。
- 按照提示导入您的 CA 证书。
- 选择 完成,然后选择 关闭。
- 启动 Docker Desktop 并验证
docker pull
是否成功(前提是 Docker Desktop 已配置为使用 MITM 代理服务器)。
注意
根据使用的 SDK 和/或运行时/框架,除了将 CA 证书添加到操作系统信任存储之外,可能还需要进一步的步骤。
- 下载 MITM 代理软件的 CA 证书。
- 打开您的网络浏览器,前往 设置 并打开 管理证书
- 选择 受信任的根证书颁发机构 选项卡。
- 选择 导入,然后浏览找到下载的 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
等)。
将 CA 证书添加到运行中的 Linux 容器
下载 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> ...