Harbor 基于自建 CA 证书实现 HTTPS 生产级部署实践

Harbor 是 CNCF 孵化的企业级云原生镜像仓库,支持镜像的安全存储、访问控制、漏洞扫描等功能。生产环境中,建议 Harbor 使用 HTTPS 加密通信以保障镜像传输安全。本文将详细介绍如何在 CentOS 7/8 环境下,通过自建 CA 证书为 Harbor 配置 HTTPS,并实现安全的镜像仓库服务。


一、环境准备

  • 操作系统:CentOS 7/8(建议最小化安装)
  • 主机名harbor.oldboyedu.com
  • IP 地址10.0.0.250
  • Harbor 版本:v2.7.4(离线安装包)
  • Docker 版本:20.10.24
  • Docker Compose 版本:v2.23.0

二、安装 Docker 与 Docker Compose

1. 解压安装包

tar xf oldboyedu-autoinstall-docker-docker-compose.tar.gz

2. 执行自动化安装脚本

./install-docker.sh i

3. 验证安装

docker --version
# Docker version 20.10.24, build 297e128

docker-compose --version
# Docker Compose version v2.23.0

三、部署 Harbor

1. 下载并解压 Harbor 安装包

Harbor 官方下载地址:https://github.com/goharbor/harbor/releases

tar xf harbor-offline-installer-v2.7.4.tgz -C /oldboyedu/softwares/

2. 创建 Harbor 证书目录结构

mkdir -pv /oldboyedu/softwares/harbor/certs/{ca,harbor-server,docker-client}
  • ca:存放自建 CA 根证书及私钥
  • harbor-server:存放 Harbor 服务端证书及私钥
  • docker-client:存放客户端证书(如有需要)

四、生成自建 CA 证书

1. 进入证书目录

cd /oldboyedu/softwares/harbor/certs/

2. 生成 CA 私钥

openssl genrsa -out ca/ca.key 4096

3. 生成 CA 根证书

openssl req -x509 -new -nodes -sha512 -days 3650 \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=oldboyedu.com" \
  -key ca/ca.key \
  -out ca/ca.crt

4. 查看 CA 证书信息(可选)

openssl x509 -in ca/ca.crt -noout -text

五、为 Harbor 生成服务端证书

1. 生成 Harbor 服务端私钥

openssl genrsa -out harbor-server/harbor.oldboyedu.com.key 4096

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

openssl req -sha512 -new \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.oldboyedu.com" \
  -key harbor-server/harbor.oldboyedu.com.key \
  -out harbor-server/harbor.oldboyedu.com.csr

3. 创建 x509 v3 扩展配置文件

cat > harbor-server/v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=harbor.oldboyedu.com
EOF

说明subjectAltName 必须包含 Harbor 的域名,否则浏览器和 Docker 客户端会报证书无效。

4. 签发 Harbor 服务端证书

openssl x509 -req -sha512 -days 3650 \
  -extfile harbor-server/v3.ext \
  -CA ca/ca.crt -CAkey ca/ca.key -CAcreateserial \
  -in harbor-server/harbor.oldboyedu.com.csr \
  -out harbor-server/harbor.oldboyedu.com.crt

六、配置 Harbor 使用自建证书

1. 复制并编辑 Harbor 配置文件

cd /oldboyedu/softwares/harbor/
cp harbor.yml.tmpl harbor.yml
vim harbor.yml

关键配置项:

hostname: harbor.oldboyedu.com

https:
  port: 443
  certificate: /oldboyedu/softwares/harbor/certs/harbor-server/harbor.oldboyedu.com.crt
  private_key: /oldboyedu/softwares/harbor/certs/harbor-server/harbor.oldboyedu.com.key

harbor_admin_password: 1

data_volume: /oldboyedu/data/harbor

注意hostname 必须与证书中的 CN/subjectAltName 保持一致。

2. 安装 Harbor

./install.sh --with-chartmuseum

3. 检查 Harbor 服务状态

  • 访问 https://harbor.oldboyedu.com/harbor/projects/1/helm-charts,确保页面可正常打开且为 HTTPS。
  • 可通过 docker-compose ps 查看 Harbor 各服务状态。

七、客户端信任自建 CA 证书

1. Linux 客户端(以 CentOS 为例)

ca/ca.crt 拷贝到 Harbor 服务器和所有需要访问 Harbor 的 Docker 客户端主机:

cp /oldboyedu/softwares/harbor/certs/ca/ca.crt /etc/pki/ca-trust/source/anchors/harbor.oldboyedu.com.crt
update-ca-trust

2. Docker 客户端配置

对于 Docker 客户端,需将 CA 证书放置于如下目录:

mkdir -p /etc/docker/certs.d/harbor.oldboyedu.com/
cp /oldboyedu/softwares/harbor/certs/ca/ca.crt /etc/docker/certs.d/harbor.oldboyedu.com/ca.crt
systemctl restart docker

3. Windows 客户端

  • ca.crt 导入到“受信任的根证书颁发机构”。
  • 配置本地 hosts 文件,添加解析:
10.0.0.250 harbor.oldboyedu.com

八、常见问题与建议

  1. 证书 CN/subjectAltName 不匹配:务必保证 Harbor 配置文件中的 hostname 与证书中的域名一致。
  2. 证书未被信任:所有访问 Harbor 的客户端都需信任自建 CA 证书,否则会出现 TLS 相关错误。
  3. 端口冲突:确保 443 端口未被其他服务占用。
  4. 数据持久化:建议将 data_volume 指向独立的数据盘,便于备份和迁移。
  5. 安全加固:生产环境建议开启 Harbor 的用户认证、镜像签名、漏洞扫描等功能。

九、总结

通过自建 CA 证书为 Harbor 配置 HTTPS,是企业级生产环境的最佳实践之一。它不仅保障了镜像传输的安全性,也为后续与 CI/CD、Kubernetes 等云原生平台的集成打下了坚实基础。建议在实际部署中,结合企业自身的安全策略,完善 Harbor 的访问控制和安全加固措施。


欢迎关注我的博客,获取更多 Harbor、Kubernetes、DevOps 相关实战干货!如有问题欢迎留言交流。


版权声明:本文原创,转载请注明出处。

posted on 2025-04-16 21:33  Leo-Yide  阅读(133)  评论(0)    收藏  举报