1、配置自定义签名

1.1、使用openssl配置自定义签名

默认主机名harbor.yangyang.com

1.1.1、配置CA证书

# 配置ca证书私钥
openssl genrsa -out ca.key 4096
# 生成ca证书,CN配置为harbor主机名
openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.yangyang.com" \
 -key ca.key \
 -out ca.crt

1.1.2、生成服务器证书

该证书包含一个crt文件和key文件

# 生成一个私钥
openssl genrsa -out harbor.yangyang.com.key 4096
# 生成一个签名请求
openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.yangyang.com" \
    -key harbor.yangyang.com.key \
    -out harbor.yangyang.com.csr

1.1.3、生成一个X509 v3文件

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

[alt_names]
DNS.1=harbor.yangyang.com
DNS.2=harbor
DNS.3=hostname
EOF

1.1.4、使用v3.ext为harbor主机生成证书

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

1.1.5、将证书提供给harbor

mkdir -p /data/cert/
cp harbor.yangyang.com.crt /data/cert/
cp harbor.yangyang.com.key /data/cert/

1.1.6、将证书提供给docker

ca.crt 域名.cert 域名.key

# 将crt文件转换成cert文件
openssl x509 -inform PEM -in harbor.yangyang.com.crt -out harbor.yangyang.com.cert
# 如果将默认的 nginx 端口 443 映射到其他端口,请创建 /etc/docker/certs.d/harbor.yangyang.com:port 或/etc/docker/certs.d/harbor_IP:port 文件夹。
mkdir -p /etc/docker/certs.d/harbor.yangyang.com/
cp harbor.yangyang.com.cert /etc/docker/certs.d/harbor.yangyang.com/
cp harbor.yangyang.com.key /etc/docker/certs.d/harbor.yangyang.com/
cp ca.crt /etc/docker/certs.d/harbor.yangyang.com/
systemctl restart docker

1.2、使用easy-rsa配置自定义签名(可选)(方法二)

2、修改配置

2.1、修改harbor.yml

# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
# 此处配置主机的FQDN
hostname: harbor.yangyang.com

# http related config
http:
  # port for http, default is 80. If https enabled, this port will redirect to https port
  port: 80

# https related config
https:
  # https port for harbor, default is 443
  port: 443
  # The path of cert and key files for nginx
  # 此处配置harbor密钥文件
  certificate: /data/cert/harbor.yangyang.com.crt
  private_key: /data/cert/harbor.yangyang.com.key
  # enable strong ssl ciphers (default: false)
  # strong_ssl_ciphers: false

2.2、FQDN配置

hostname -f 查看FQDN 注意格式必须为XXX.XXX的域名格式

hostname 的主机名可以为XXXX的主机名格式

如果没有域名只有一个主机名会报错,误认为是 Docker Hub 上 某个用户的仓库。

最好查看一下 /etc/hosts文件格式

2.3、docker客户端配置

在客户端主机docker密钥文件夹需要上传密钥文件 /etc/docker/cert.d/harbor.yangyang.com/

否则会报错tls: failed to verify certificate: x509: certificate signed by unknown authority