如何为 Docker 镜像仓库生成自签名 SSL 证书

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

保护你的 Docker 镜像仓库安全对于维护容器镜像的完整性以及确保基于 Docker 的应用程序的安全至关重要。在本教程中,我们将指导你为 Docker 镜像仓库生成自签名 SSL 证书的过程,使你能够在 Docker 客户端和镜像仓库之间建立可信连接。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/tag("Tag an Image") docker/ImageOperationsGroup -.-> docker/push("Push Image to Repository") docker/SystemManagementGroup -.-> docker/login("Log into Docker Registry") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/pull -.-> lab-411544{{"如何为 Docker 镜像仓库生成自签名 SSL 证书"}} docker/tag -.-> lab-411544{{"如何为 Docker 镜像仓库生成自签名 SSL 证书"}} docker/push -.-> lab-411544{{"如何为 Docker 镜像仓库生成自签名 SSL 证书"}} docker/login -.-> lab-411544{{"如何为 Docker 镜像仓库生成自签名 SSL 证书"}} docker/build -.-> lab-411544{{"如何为 Docker 镜像仓库生成自签名 SSL 证书"}} end

理解自签名 SSL 证书

SSL(安全套接层)证书用于在客户端和服务器之间建立安全连接。它们确保双方之间传输的数据被加密,并防止未经授权的访问。自签名 SSL 证书是一种由同一实体创建并签名的 SSL 证书,而不是由受信任的证书颁发机构(CA)签名。

自签名 SSL 证书通常用于开发或测试环境,在这些环境中,获取 CA 签名证书的成本和复杂性可能不必要。它们也可用于无法获得受信任 CA 的场景,或者组织希望对证书管理过程有更多控制权的情况。

然而,默认情况下,Web 浏览器和其他客户端不信任自签名 SSL 证书。当客户端遇到自签名证书时,通常会显示一条警告消息,表明该证书不受信任。这可能会给依赖安全连接的 Web 应用程序和其他服务带来问题。

要在生产环境中使用自签名 SSL 证书,你需要确保该证书被所有访问你的应用程序或服务的客户端信任。这可以通过将自签名证书分发给客户端并将它们配置为信任该证书来实现。

在 Docker 镜像仓库的背景下,使用自签名 SSL 证书可能是一个实用的解决方案,特别是如果你在组织内部运行私有镜像仓库。通过生成自签名证书并配置 Docker 使用它,你可以确保 Docker 客户端和镜像仓库之间的通信是安全的,而无需受信任的 CA 签名证书。

为 Docker 镜像仓库生成自签名 SSL 证书

前提条件

在生成自签名 SSL 证书之前,请确保你具备以下前提条件:

  • 基于 Linux 的系统(本示例使用 Ubuntu 22.04)
  • 安装了 OpenSSL(大多数 Linux 发行版通常已预装)

生成自签名 SSL 证书的步骤

  1. 在你的 Ubuntu 22.04 系统上打开一个终端。
  2. 为 SSL 证书生成一个私钥:
openssl genrsa -out registry.key 2048
  1. 使用私钥生成一个自签名 SSL 证书:
openssl req -new -x509 -key registry.key -out registry.crt -days 365

此命令将提示你输入有关证书的各种详细信息,例如通用名称(CN),它应与你的 Docker 镜像仓库的主机名或 IP 地址匹配。4. 验证生成的证书:

openssl x509 -in registry.crt -text -noout

这将显示生成的自签名 SSL 证书的详细信息。5. (可选)如果你想为你的 Docker 镜像仓库使用自定义域名,你可以在运行 Docker 客户端的系统上更新 /etc/hosts 文件,以将域名映射到 Docker 镜像仓库的 IP 地址。

graph LR A[生成私钥] --> B[生成自签名 SSL 证书] B --> C[验证证书] C --> D[更新 /etc/hosts(可选)]

通过遵循这些步骤,你已经生成了一个可用于保护你的 Docker 镜像仓库的自签名 SSL 证书。下一步是配置 Docker 使用此自签名证书。

配置 Docker 使用自签名证书

将自签名证书复制到 Docker 主机

  1. 将上一步中生成的 registry.crt 文件复制到 Docker 主机。你可以使用文件传输工具或 scp 命令来复制文件。
scp registry.crt user@docker-host:/etc/docker/certs.d/myregistry.example.com/ca.crt

user@docker-host 替换为你的 Docker 主机的适当用户名和主机名或 IP 地址,将 myregistry.example.com 替换为你的 Docker 镜像仓库的主机名或 IP 地址。

配置 Docker 使用自签名证书

  1. 在 Docker 主机上,为自签名证书创建目录:
sudo mkdir -p /etc/docker/certs.d/myregistry.example.com
  1. registry.crt 文件复制到新创建的目录:
sudo cp registry.crt /etc/docker/certs.d/myregistry.example.com/ca.crt
  1. 重启 Docker 守护进程以应用更改:
sudo systemctl restart docker

验证配置

  1. 使用 Docker 客户端尝试从你的 Docker 镜像仓库拉取镜像:
docker pull myregistry.example.com/my-image:latest

如果配置正确,Docker 客户端应该能够连接到镜像仓库,而不会出现任何与 SSL/TLS 相关的错误。

graph LR A[将证书复制到 Docker 主机] --> B[创建证书目录] B --> C[将证书复制到目录] C --> D[重启 Docker 守护进程] D --> E[验证配置]

通过遵循这些步骤,你已配置 Docker 使用为你的 Docker 镜像仓库生成的自签名 SSL 证书。这确保了 Docker 客户端和镜像仓库之间的通信是安全的,即使该证书不是由受信任的证书颁发机构签名的。

总结

通过遵循本教程中概述的步骤,你将能够为你的 Docker 镜像仓库生成自签名 SSL 证书,配置 Docker 使用该证书,并确保 Docker 客户端与镜像仓库之间的安全通信。这将有助于你增强基于 Docker 的基础设施的安全性,并简化整个 Docker 部署过程。