192.168.91.164私服harbor
1、Harbor 服务器生成自签 业务证书
mkdir -p /root/harbor/cert
cd /root/harbor/cert
openssl req -x509 -nodes -days 3650 -newkey rsa:4096 \
-keyout server.key -out server.crt \
-subj "/CN=192.168.91.164"


验证证书输出 CA:TRUE
openssl x509 -in server.crt -text -noout | grep -A2 "Basic Constraints"

显示
Basic Constraints:
CA:TRUE
#显示TRUE 为根证书 ca.crt,拥有签发子证书权限,ca私钥 ca.key 如果对外开放环境,风险极高
显示
Basic Constraints:
CA:FALSE
#显示FALSE 为业务证书,不能签发其他证书,只能给服务(Harbor、nginx)使用,比如服务端(Harbor):部署 server.crt + server.key
2、harbor.yml,打开 https 配置
hostname: 192.168.91.164
http:
port: 80
https:
port: 443
#业务证书
certificate: /root/harbor/cert/server.crt
private_key: /root/harbor/cert/server.key



3、重新生成配置并重启
cd /root/harbor
./prepare
docker compose down
docker compose up -d

4、重新生成带 SAN 的证书(标准根治方案,推荐)
登录 harbor 主机 192.168.91.164,执行整套命令
cd /root/harbor/cert
# 创建openssl配置文件,写入SAN
cat > openssl-san.cnf <<EOF
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_ext
prompt = no
[req_distinguished_name]
CN = 192.168.91.164
[v3_ext]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
IP.1 = 192.168.91.164
EOF
# 生成证书
openssl req -x509 -nodes -days 3650 -newkey rsa:4096 \
-keyout server.key -out server.crt \
-config openssl-san.cnf

5、更新 harbor 证书并重启 harbor
cd /root/harbor
./prepare
docker compose down
docker compose up -d

6、CA证书(根证书)生成
root/harbor/cert 目录下生成ca.crt
#1 生成CA根密钥+根证书 ca.key ca.crt
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor-ca" \
-key ca.key -out ca.crt
#2 生成Harbor业务私钥
openssl genrsa -out server.key 4096
#3 生成证书请求
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor" \
-key server.key -out server.csr
#4 v3扩展(包含IP SAN 192.168.91.164)
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
IP.1=192.168.91.164
EOF
#5 CA签发业务证书 server.crt
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in server.csr -out server.crt


显示
Basic Constraints:
CA:TRUE
#显示TRUE 为根证书 ca.crt,拥有签发子证书权限,ca私钥 ca.key 如果对外开放环境,风险极高
显示
Basic Constraints:
CA:FALSE
#显示FALSE 为业务证书,不能签发其他证书,只能给服务(Harbor、nginx)使用,比如服务端(Harbor):部署 server.crt + server.key
7、所有 k8s 节点部署证书(master-166/node2-167/node3-168)


如果是 containerd(KubeSphere 大概率这个)
# 在master-166/node2-167/node3-168节点主机分别执行
mkdir -p /etc/containerd/certs.d/192.168.91.164
scp root@192.168.91.164:/root/harbor/cert/ca.crt /etc/containerd/certs.d/192.168.91.164/
systemctl restart containerd

ca.crt 去校验 Harbor 服务证书

cp /etc/containerd/certs.d/192.168.91.164/ca.crt /etc/pki/ca-trust/source/anchors/ca.crt
update-ca-trust extract
systemctl restart containerd
#####验证证书是否被系统成功载入
openssl s_client -connect 192.168.91.164:443


8、所有 k8s 节点禁用私有仓库使用 HTTP 方式
#修改所有节点 docker daemo
vi /etc/docker/daemon.json
#{ "insecure-registries":["192.168.91.164"] } 配置删除掉
#重启 docker
systemctl daemon-reload
systemctl restart docker

浙公网安备 33010602011771号