在Docker中使用CA证书
注意
在生产容器中使用中间人(MITM)CA证书时应遵循最佳实践。如果被攻破,攻击者可能会拦截敏感数据、冒充受信任的服务或执行中间人攻击。在继续之前,请咨询您的安全团队。
如果您的公司使用检查HTTPS流量的代理,您可能需要在您的主机和Docker容器或镜像中添加所需的根证书。这是因为Docker及其容器在拉取镜像或进行网络请求时,需要信任代理的证书。
在主机上,添加根证书确保任何Docker命令(如docker pull)都能正常工作。对于容器,您需要在构建过程中或运行时将根证书添加到容器的信任存储中。这确保了在容器内运行的应用程序可以通过代理进行通信,而不会遇到安全警告或连接失败。
将CA证书添加到主机
以下部分描述了如何在您的macOS或Windows主机上安装CA证书。对于Linux,请参考您的发行版的文档。
macOS
- 下载您的MITM代理软件的CA证书。
- 打开Keychain Access应用程序。
- 在钥匙串访问中,选择系统,然后切换到证书标签。
- 将下载的证书拖放到证书列表中。如果提示,请输入您的密码。
- 找到新添加的证书,双击它,并展开信任部分。
- 为证书设置始终信任。如果提示,请输入您的密码。
- 启动 Docker Desktop 并验证
docker pull是否正常工作,假设 Docker Desktop 已配置为使用 MITM 代理。
Windows
选择您是否要使用Microsoft管理控制台(MMC)或您的网页浏览器安装证书。
- 下载MITM代理软件的CA证书。
- 打开Microsoft管理控制台(
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格式:Example command$ 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-certificatesExample outputUpdating 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.comExample output<!doctype html> <html> <head> <title>Example Domain</title> ...