番摊机器人 自建 HTTPS 证书的 Harbor 镜像仓库
搭建基于自建 HTTPS 证书的 Harbor 镜像仓库,主要包含生成 CA 根证书、生成服务器证书、配置 Harbor 以及客户端信任证书四个核心步骤。以下是详细的操作指南:
1. 前期准备与域名映射
在生成证书前,需要确定 Harbor 服务器的 IP 地址和访问域名。为了便于测试,通常使用 hosts 文件进行域名映射。
假设 Harbor 服务器 IP 为 192.168.9.200,域名为 reg.harbor.local。
在 Harbor 服务器及所有需要访问该仓库的客户端机器上执行:
bash
echo "192.168.9.200 reg.harbor.local" >> /etc/hosts
2. 生成 CA 根证书
CA 证书用于签署服务器证书,建立信任链。
创建一个目录存放证书文件,例如 /data/certs:
bash
mkdir -p /data/certs
cd /data/certs
生成 CA 私钥:
bash
openssl genrsa -out ca.key 4096
生成 CA 根证书(有效期设为 3650 天,可根据需求调整):
bash
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=reg.harbor.local" \
-key ca.key \
-out ca.crt
注意:CN 字段建议填写你的域名或 IP。
3. 生成服务器证书
服务器证书需要包含 Subject Alternative Name (SAN) 扩展,以支持域名和 IP 访问。
3.1 生成服务器私钥
bash
openssl genrsa -out reg.harbor.local.key 4096
3.2 生成证书签名请求 (CSR)
bash
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=reg.harbor.local" \
-key reg.harbor.local.key \
-out reg.harbor.local.csr
3.3 创建 v3.ext 配置文件
创建一个名为 v3.ext 的文件,用于指定 SAN 信息。请将 DNS.1 替换为你的域名,IP.1 替换为你的服务器 IP(如果需要通过 IP 访问)。
ini
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=reg.harbor.local
# 如果需要通过IP访问,取消下面注释并修改IP
# IP.1=192.168.9.200
3.4 生成服务器证书
使用 CA 证书和私钥对 CSR 进行签名,生成最终的服务器证书:
bash
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in reg.harbor.local.csr \
-out reg.harbor.local.crt
4. 配置 Harbor
4.1 整理证书文件
Harbor 配置文件通常指向特定的证书路径。将生成的服务器证书和私钥复制到 Harbor 配置的证书目录(例如 /data/cert,需提前创建):
bash
mkdir -p /data/cert
cp reg.harbor.local.crt /data/cert/
cp reg.harbor.local.key /data/cert/
4.2 修改 harbor.yml 配置文件
进入 Harbor 安装目录,编辑 harbor.yml 文件。找到 https 部分,确保证书路径正确,并启用 HTTPS:
yaml
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /data/cert/reg.harbor.local.crt
private_key: /data/cert/reg.harbor.local.key
注意:如果之前配置了 HTTP,请注释掉 http 相关配置或确保端口不冲突。
4.3 重新部署 Harbor
停止当前运行的 Harbor 实例,重新生成配置并启动:
bash
docker-compose down -v
./prepare
docker-compose up -d
5. 客户端配置信任证书
为了让 Docker 客户端能够信任自建的 CA 证书,需要在每台需要推送或拉取镜像的机器上配置证书。
5.1 创建证书目录
Docker 守护进程会在 /etc/docker/certs.d/<registry-domain>/ 目录下查找证书。
bash
mkdir -p /etc/docker/certs.d/reg.harbor.local/
5.2 复制 CA 证书
将之前生成的 ca.crt 复制到上述目录,并重命名为 ca.crt(某些版本可能需要命名为 domain.crt,但标准做法是 ca.crt 或直接作为受信任根证书导入系统)。
bash
cp ca.crt /etc/docker/certs.d/reg.harbor.local/ca.crt
可选步骤:如果操作系统层面也需要信任该 CA(如使用 curl 或其他工具),可以将 ca.crt 添加到系统的受信任证书存储中(例如在 CentOS/RHEL 上使用 update-ca-trust,在 Ubuntu 上使用 update-ca-certificates)。
5.3 重启 Docker 服务
bash
systemctl restart docker
6. 验证测试
在客户端机器上尝试登录 Harbor:
bash
docker login reg.harbor.local
输入 admin 用户和密码(默认密码通常在 harbor.yml 中设置,初始为 Harbor12345)。如果登录成功,说明 HTTPS 配置及证书信任已生效。
随后可以尝试推送一个测试镜像:
bash
docker tag hello-world reg.harbor.local/library/hello-world:latest
docker push reg.harbor.local/library/hello-world:latest
下一篇 >>