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
八、常见问题与建议
- 证书 CN/subjectAltName 不匹配:务必保证 Harbor 配置文件中的
hostname与证书中的域名一致。 - 证书未被信任:所有访问 Harbor 的客户端都需信任自建 CA 证书,否则会出现 TLS 相关错误。
- 端口冲突:确保 443 端口未被其他服务占用。
- 数据持久化:建议将
data_volume指向独立的数据盘,便于备份和迁移。 - 安全加固:生产环境建议开启 Harbor 的用户认证、镜像签名、漏洞扫描等功能。
九、总结
通过自建 CA 证书为 Harbor 配置 HTTPS,是企业级生产环境的最佳实践之一。它不仅保障了镜像传输的安全性,也为后续与 CI/CD、Kubernetes 等云原生平台的集成打下了坚实基础。建议在实际部署中,结合企业自身的安全策略,完善 Harbor 的访问控制和安全加固措施。
欢迎关注我的博客,获取更多 Harbor、Kubernetes、DevOps 相关实战干货!如有问题欢迎留言交流。
版权声明:本文原创,转载请注明出处。
浙公网安备 33010602011771号