配置 Harbor 的 HTTPS 访问
默认情况下,Harbor 不附带证书。可以部署不启用安全机制的 Harbor,以便通过 HTTP 协议进行连接。但请注意,仅在没有外部网络连接的隔离测试或开发环境中,使用 HTTP 才是可接受的。在非隔离环境中使用 HTTP 会使您面临中间人攻击的风险。在生产环境中,务必使用 HTTPS。
要配置 HTTPS,必须创建 SSL 证书。您可以使用由受信任的第三方 CA 签名的证书,也可以使用自签名证书。本节介绍如何使用 OpenSSL 创建 CA,以及如何使用您的 CA 签署服务器证书和客户端证书。您也可以选择其他 CA 提供商,例如 Let’s Encrypt。
以下步骤假设您的 Harbor 注册表主机名为 yourdomain.com,并且其 DNS 记录指向运行 Harbor 的主机。
生成证书颁发机构证书
在生产环境中,您应当从证书颁发机构(CA)获取证书。而在测试或开发环境中,您可以自行生成 CA 证书。要生成 CA 证书,请执行以下命令。
生成 CA 证书私钥。
openssl genrsa -out ca.key 4096生成 CA 证书。
请调整 - subj 选项中的值以反映您的组织信息。若您使用完全限定域名(FQDN)连接 Harbor 主机,则必须将其指定为通用名称(CN)属性。
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=MyPersonal Root CA" \
-key ca.key \
-out ca.crt生成服务器证书
证书通常包含一个.crt 文件和一个.key 文件,例如 yourdomain.com.crt 和 yourdomain.com.key。
- 生成一个私钥。
openssl genrsa -out yourdomain.com.key 4096- 生成证书签名请求(CSR)。
调整 ‘-subj‘ 选项中的值以反映您的组织信息。若使用完全限定域名(FQDN)连接 Harbor 主机,必须将其指定为通用名称(CN)属性,并在密钥及证书签名请求(CSR)文件名中体现该域名。
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
-key yourdomain.com.key \
-out yourdomain.com.csr- 生成一个 x509 v3 扩展文件。
无论您使用 FQDN(完全限定域名)还是 IP 地址连接到 Harbor 主机,都必须创建此文件,以便为您的 Harbor 主机生成符合主题备用名称(SAN)和 x509 v3 扩展要求的证书。请替换 DNS 条目以反映您的域名。
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
EOF使用 v3.ext 文件为您的 Harbor 主机生成证书。
将 CSR 和 CRT 文件名中的 yourdomain.com 替换为 Harbor 主机名。
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in yourdomain.com.csr \
-out yourdomain.com.crt向 Harbor 和 Docker 提供证书
生成 ca.crt、yourdomain.com.crt 和 yourdomain.com.key 文件后,您必须将这些文件提供给 Harbor 和 Docker,并重新配置 Harbor 以使用它们。
将服务器证书和密钥复制到您 Harbor 主机上的证书文件夹中。
cp yourdomain.com.crt /data/cert/
cp yourdomain.com.key /data/cert/将 yourdomain.com.crt 转换为 yourdomain.com.cert,供 Docker 使用。
Docker 守护进程将.crt 文件视为 CA 证书,而将.cert 文件视为客户端证书。
openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert将服务器证书、密钥及 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中。需先创建相应的目录结构。
cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/
cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/
cp ca.crt /etc/docker/certs.d/yourdomain.com/如果您将默认的 nginx 端口 443 映射到了其他端口,请创建文件夹 /etc/docker/certs.d/ 您的域名:端口,或者 /etc/docker/certs.d/harbor_IP: 端口。
重启 Docker 引擎。
systemctl restart docker您可能还需要在操作系统层面信任证书。更多信息请参阅 Harbor 安装故障排除 。
以下示例展示了一种使用自定义证书的配置方式。
/etc/docker/certs.d/
└── yourdomain.com:port
├── yourdomain.com.cert <-- Server certificate signed by CA
├── yourdomain.com.key <-- Server key signed by CA
└── ca.crt <-- Certificate authority that signed the registry certificate部署或重新配置 Harbor
若尚未部署 Harbor,请参阅 配置 Harbor YML 文件 了解如何通过在 harbor.yml 中指定主机名和 https 属性来配置 Harbor 使用证书。
若您已通过 HTTP 部署 Harbor 并希望重新配置以使用 HTTPS,请执行以下步骤。
运行 prepare 脚本以启用 HTTPS。
Harbor 采用一个 nginx 实例作为所有服务的反向代理。您需通过 prepare 脚本来配置 nginx 以启用 HTTPS。该 prepare 脚本位于 Harbor 安装包中,与 install.sh 脚本处于同一层级。
./prepare如果 Harbor 正在运行,请停止并移除现有实例。
您的图像数据仍保留在文件系统中,因此不会丢失任何数据。
docker compose down -v重启 Harbor
docker compose up -d验证 HTTPS 连接
为 Harbor 配置 HTTPS 后,可通过以下步骤验证 HTTPS 连接是否生效。
打开浏览器并输入 https://yourdomain.com,应显示 Harbor 界面。
某些浏览器可能会显示警告,提示证书颁发机构(CA)未知。这种情况通常出现在使用自签名 CA 而非受信任的第三方 CA 时。您可以将该 CA 导入浏览器以消除此警告。
在运行 Docker 守护进程的机器上,检查 /etc/docker/daemon.json 文件,确保未为 https://yourdomain.com 设置 - insecure-registry 选项。
从 Docker 客户端登录 Harbor。
docker login yourdomain.com如果您已将 nginx 的 443 端口映射到其他端口,请在登录命令中添加该端口。
docker login yourdomain.com:port最后编辑:Jeebiz 更新时间:2025-12-10 15:39