配置Harbor的HTTPS访问,及出现x509: cannot validate certificate for 。。 because it doesn‘t contain any IP SANs

1 篇文章 0 订阅
1 篇文章 0 订阅
https://goharbor.io/docs/2.10.0/install-config/configure-https/  来自官方案例

使用 OpenSSL 创建 CA,以及如何使用 CA 对服务器证书和客户端证书进行签名

以下过程假定 Harbor 的主机名为:yourdomain.com ,并且其 DNS 记录指向运行 Harbor 的主机。

 生成证书颁发机构证书

我生成证书的主机和harbor主机是同一个。

#生成 CA 证书私钥
openssl genrsa -out ca.key 4096

#生成 CA 证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
 -key ca.key \
 -out ca.crt
#'CN=yourdomain.com'改为自己harbor的访问地址

生成服务器证书

#生成私钥
openssl genrsa -out yourdomain.com.key 4096

#生成证书签名请求 (CSR)
openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
    -key yourdomain.com.key \
    -out yourdomain.com.csr
#与上方一样,'yourdomain.com'  换为自己的harbor访问地址

生成 x509 v3 扩展文件,特别是用于定义证书的使用方式和备用名称(SAN),

Error response from daemon: Get "https://192.168.237.141/v2/": x509: cannot validate certificate for 192.168.237.141 because it doesn't contain any IP SANs
这个错误就是因为没有定义正确这个文件

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

[alt_names]
DNS.1=yourdomain.com
IP.1=192.168.237.141
EOF

#extendedKeyUsage = serverAuth:指定了证书的扩展密钥用途,这里是用于服务器认证。
#subjectAltName = @alt_names:指定了备用名称(SAN)的使用,允许在单个证书中包含多个主题名称。
#[alt_names]:指定了备用名称的具体值,如主机名或域名

#如果你是测试环境,并且只能通过ip访问harbor的时候,一定要把你映射yourdomain.com的ip写这里
#IP.1=192.168.237.141。主要这项

使用上面的定义的‘v3.ext’文件为您的 Harbor 主机生成证书。

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

yourdomain.com.crt转换为 yourdomain.com.cert,供 Docker 使用。

openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert

此时证书部分就做好了

生成了ca.crt 、ca.key 、ca.srl 、v3.ext  、yourdomain.com.cert 、yourdomain.com.crt 、yourdomain.com.csr 、yourdomain.com.key 这些文件


修改harbor.yaml配置文件

# Configuration file of Harbor

# 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.
hostname: 192.168.237.141

# 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
  certificate: /opt/harbor/ssl/yourdomain.com.crt  #harbor主机上存放证书的位置
  private_key: /opt/harbor/ssl/yourdomain.com.key  #harbor主机上存放证书的位置
  # enable strong ssl ciphers (default: false)
  # strong_ssl_ciphers: false

重启harbor

#改变一下环境
./prepare

#在harbor.yaml的目录中,重启
docker-compose down -v

docker-compose up -d

cp证书文件到客户端

#在你要使用harbor仓库的主机上,创建docker存放证书的文件夹
mkdir /etc/docker/certs.d/yourdomain.com/

#将服务器私钥及证书还有根证书cp到这个文件夹
scp yourdomain.com.cert  yourdomain.com:/etc/docker/certs.d/yourdomain.com/

scp yourdomain.com.key yourdomain.com:/etc/docker/certs.d/yourdomain.com/

scp ca.crt yourdomain.com:/etc/docker/certs.d/yourdomain.com/

设置映射/etc/hosts

vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.237.141  yourdomain.com

 重启docker

systemctl  restart  docker

下面登录harbor仓库就没问题了

[root@lancy12 ~]# docker login yourdomain.com
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值