将 CA 证书与 Docker 配合使用
谨慎
使用中间人 (MITM) CA 时应遵循最佳实践 生产容器中的证书。如果遭到入侵,攻击者可以 拦截敏感数据、欺骗可信服务或执行 中间人攻击。在继续之前,请咨询您的安全团队。
如果您的公司使用检查 HTTPS 流量的代理,则可能需要添加 主机和 Docker 容器所需的根证书 或镜像。这是因为 Docker 及其容器在拉取镜像或 发出网络请求时,需要信任代理的证书。
在主机上,添加根证书可确保任何 Docker 命令(如docker pull
) 工作没有问题。对于容器,您需要添加根
certificate 添加到容器的信任存储中,或者
在运行时。这可确保在容器内运行的应用程序可以
通过代理进行通信而不会遇到安全警告,或者
连接失败。
将 CA 证书添加到主机
以下部分介绍如何在 macOS 上安装 CA 证书或 Windows 主机。对于 Linux,请参阅您的发行版的文档。
macOS 的
- 下载 MITM 代理软件的 CA 证书。
- 打开 Keychain Access 应用程序。
- 在 Keychain Access 中,选择 System(系统),然后切换到 Certificates(证书)选项卡。
- 将下载的证书拖放到证书列表中。如果出现提示,请输入您的密码。
- 找到新添加的证书,双击它,然后展开 Trust (信任) 部分。
- 为证书设置 Always Trust。如果出现提示,请输入您的密码。
- 启动 Docker Desktop 并验证
docker pull
有效,假设 Docker Desktop 配置为使用 MITM 代理。
窗户
选择是否要使用 Microsoft 管理控制台 (MMC) 或 Web 浏览器。
- 下载 MITM 代理软件的 CA 证书。
- 打开 Microsoft 管理控制台 (
mmc.exe
). - 在 MMC 中添加 Certificates 管理单元。
- 选择 “文件 → 添加/删除管理单元”,然后选择 “证书 → 添加>”。
- 选择 Computer Account(计算机帐户),然后选择 Next(下一步)。
- 选择 Local computer (本地计算机),然后选择 Finish (完成)。
- 导入 CA 证书:
- 在 MMC 中,展开 Certificates (Local Computer) (证书(本地计算机))。
- 展开 Trusted Root Certification Authorities (受信任的根证书颁发机构) 部分。
- 右键单击 Certificates(证书),然后选择 All Tasks (所有任务) 和 Import...(导入...)。
- 按照提示导入 CA 证书。
- 选择 Finish (完成),然后选择 Close (关闭)。
- 启动 Docker Desktop 并验证
docker pull
成功(假设 Docker Desktop 已配置为使用 MITM 代理服务器)。
注意
根据所使用的 SDK 和/或运行时/框架,进一步的步骤可能是 除了将 CA 证书添加到作系统的信任之外还需要 商店。
- 下载 MITM 代理软件的 CA 证书。
- 打开 Web 浏览器,转到“设置”,然后打开“管理证书”
- 选择 Trusted Root Certification Authorities (受信任的根证书颁发机构) 选项卡。
- 选择 Import(导入),然后浏览下载的 CA 证书。
- 选择 Open(打开),然后选择 Place all certificates in the following store(将所有证书放在以下存储中)。
- 确保选中 Trusted Root Certification Authorities(受信任的根证书颁发机构),然后选择 Next(下一步)。
- 选择 Finish (完成),然后选择 Close (关闭)。
- 启动 Docker Desktop 并验证
docker pull
成功(假设 Docker Desktop 已配置为使用 MITM 代理服务器)。
将 CA 证书添加到 Linux 镜像和容器
如果您需要运行依赖于内部或自定义的容器化工作负载 证书,例如在具有 Corporate Proxies 或 Secure 的环境中 服务,您必须确保容器信任这些证书。没有 添加必要的 CA 证书后,容器中的应用程序可能会 尝试连接到 时遇到失败的请求或安全警告 HTTPS 终端节点。
通过在构建时将 CA 证书添加到镜像 时间,请确保从镜像启动的任何容器都将信任 指定的证书。这对于 需要无缝访问内部 API、数据库或其他服务 生产。
如果重建镜像不可行,您可以改为添加 证书直接发送到容器。然而 如果容器被销毁,则在运行时添加的证书不会保留,或者 recreated,因此此方法通常用于临时修复或测试 场景。
向镜像添加证书
注意
以下命令适用于 Ubuntu 基础镜像。如果您的构建使用 不同的 Linux 发行版,使用等效命令进行包管理 (
apt-get
,update-ca-certificates
等)。
要在构建容器镜像时将 ca 证书添加到容器镜像中,请添加 按照说明作 Dockerfile。
向容器添加证书
注意
以下命令适用于基于 Ubuntu 的容器。如果您的容器 使用不同的 Linux 发行版,对 package 使用等效命令 管理 (
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> ...