下面给你一份 清晰、系统、可直接用于实战的《Docker 基础:私库系列:再探 Harbor(4)— HTTPS 方式的私库管理》总结与教程》
一步步从 HTTP → HTTPS → 证书 → 客户端配置 → 推拉镜像 全流程说明。


🌐 Docker 私有仓库 Harbor:HTTPS 管理完整指南

Harbor 在生产环境中 必须使用 HTTPS,否则:

  • 密码会明文传输
  • Docker 客户端需要 --insecure-registry 才能访问
  • Notary / 安全扫描等高级功能不能启用

下面从零搭建一个 使用 HTTPS 的 Harbor 私有仓库


1️⃣ 创建证书(自签名或正式 CA)

方式 A:使用自签名证书(测试环境常用)

1. 创建 CA 私钥

openssl genrsa -out ca.key 4096

2. 生成 CA 根证书

openssl req -x509 -new -nodes \
  -key ca.key -days 3650 \
  -out ca.crt \
  -subj "/CN=myregistry.com"

3. 为 Harbor 生成证书

openssl genrsa -out harbor.key 4096

4. 生成证书签名请求(CSR)

openssl req -new \
  -key harbor.key \
  -out harbor.csr \
  -subj "/CN=myregistry.com"

5. 创建证书

openssl x509 -req \
  -CA ca.crt -CAkey ca.key \
  -CAcreateserial \
  -in harbor.csr \
  -out harbor.crt \
  -days 3650

你将得到:

ca.crt
harbor.crt
harbor.key


方式 B:用 Let’s Encrypt 正式证书(生产建议)

只需运行:

certbot certonly --standalone -d myregistry.com

证书位于:

/etc/letsencrypt/live/myregistry.com/


2️⃣ Harbor 配置 HTTPS

编辑 Harbor 配置文件:

vim harbor.yml

找到:

hostname: myregistry.com

https:
  enabled: true
  certificate: /data/cert/harbor.crt
  private_key: /data/cert/harbor.key

然后执行:

sudo ./prepare
sudo docker-compose down -v
sudo docker-compose up -d

Harbor 将以 HTTPS 方式运行。


3️⃣ 客户端(Docker)信任 Harbor 的证书

对于 自签名证书,必须让 Docker 信任 CA:

在每一个要连接 Harbor 的 Docker 主机上:

1. 创建目录

sudo mkdir -p /etc/docker/certs.d/myregistry.com/

2. 拷贝 CA 证书

sudo cp ca.crt /etc/docker/certs.d/myregistry.com/ca.crt

3. 重启 Docker

sudo systemctl restart docker

如果不做这一步,会报错:

x509: certificate signed by unknown authority


4️⃣ 登录 Harbor(HTTPS)

docker login myregistry.com

输入 Harbor 管理员(或项目用户)账号密码成功即可。


5️⃣ 推送镜像至 HTTPS Harbor

1. 给镜像打标签

docker tag nginx:latest myregistry.com/library/nginx:v1

2. 推送镜像

docker push myregistry.com/library/nginx:v1

输出类似:

The push refers to repository [...]
latest: digest: sha256:... size: ...

即表示 HTTPS Harbor 推送成功。


6️⃣ 从 Harbor 拉取镜像(HTTPS)

docker pull myregistry.com/library/nginx:v1

成功后即可使用。


7️⃣ 常见错误与解决方案

❌ x509: certificate signed by unknown authority

✔ 原因:Docker 不信任你的 CA
✔ 解决:把 ca.crt 放到 /etc/docker/certs.d/myregistry.com/


❌ Client sent an HTTP request to an HTTPS server

✔ 原因:你访问时没加 https 或客户端没信任证书
✔ 检查:

  • harbor.yml 中 https 是否启用
  • Docker 客户端是否信任证书

❌ unauthorized: authentication required

✔ 需要 docker login
✔ 也需确认镜像属于正确的 Project(如 library


❌ Harbor 后台 444/502

通常是 nginx 证书路径或权限错误
需确认 Harbor 可读取证书文件。


🎯 总结(HTTPS Harbor 4 步完成)

  1. 生成证书(CA + Harbor)
  2. 配置 harbor.yml 启动 https
  3. Docker 客户端信任 CA
  4. login → push → pull

即可完成安全的 Harbor 私有仓库部署。