Harbor镜像仓库使用SSL双向认证设置

Harbor镜像仓库使用SSL双向认证设置

环境信息

名称版本信息
操作系统Kylin V10
Harbor2.7.0
Nginx1.21.5
Docker20.10.8
Continerd1.6.14

备注:文档中 reg.mydomain.com 替换为实际使用的域名或IP

1. 证书

1.1 证书生成

(1)使用 https://github.com/hurricane1988/cert-generator.git 进行证书生成

(2)或使用 openssl 命令生成

# 1 生成CA证书

# 生成CA私钥
openssl genrsa -out ca.key 2048
# 生成CA证书
openssl req -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=CN/ST=Beijing/L=Beijing/O=Personal/OU=Personal/CN=Registry CA"



# 2 创建v3.ext文件

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

[alt_names]
DNS.1=reg.mydomain.com
EOF



# 3 生成服务端证书

# 生成服务端私钥
openssl genrsa -out server.key 2048
# 生成服务端CSR(证书签名请求)
openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Personal/OU=Personal/CN=reg.mydomain.com"
# 使用CA证书签名生成服务端证书
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -extfile v3.ext




# 4 生成客户端证书

# 生成客户端私钥
openssl genrsa -out client.key 2048
# 生成客户端CSR
openssl req -new -key client.key -out client.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Personal/OU=Personal/CN=Registry client"
# 使用CA证书签名生成客户端证书
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365
# 生成cert格式客户端证书
openssl x509 -inform PEM -in client.crt -out client.cert

1.2 证书上传

根证书(ca.crt)和服务端证书(server.cert、server.key)上传至Nginx服务器和Harbor服务器使用

根证书(ca.crt)和客户端证书(client.cert、client.key)上传至容器环境服务器使用

2. Harbor镜像仓库设置

双向认证方案:使用 Nginx 代理 Harbor镜像仓库,Nginx开启双向认证

2.1 Nginx配置

2.1.1 安装Nginx

参照官网:https://nginx.org/

2.1.2 Nginx配置

增加代理Harbor配置,Harbor地址为 127.0.0.1:8443 (Nginx和Harbor部署在一台服务器)

vim /etc/nginx/conf.d/harbor.conf
  upstream harbor {
    server 127.0.0.1:8443;
  }

  server {
    listen 443 ssl;
    server_name reg.mydomain.com;
    server_tokens off;
    # SSL
    ssl_certificate /data/ca/server.crt;
    ssl_certificate_key /data/ca/server.key;

    ssl_client_certificate /data/ca/ca.crt;
    ssl_verify_client on;

    # Recommendations from https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
    ssl_protocols TLSv1.2;
    ssl_ciphers '!aNULL:kECDH+AESGCM:ECDH+AESGCM:RSA+AESGCM:kECDH+AES:ECDH+AES:RSA+AES:';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;

    # disable any limits to avoid HTTP 413 for large image uploads
    client_max_body_size 0;

    # required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
    chunked_transfer_encoding on;

    # Add extra headers
    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
    add_header X-Frame-Options DENY;
    add_header Content-Security-Policy "frame-ancestors 'none'";

    location / {
      proxy_pass https://harbor/;
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      #proxy_set_header X-Forwarded-Proto $x_forwarded_proto;

      proxy_cookie_path / "/; HttpOnly; Secure";

      proxy_buffering off;
      proxy_request_buffering off;
    }
  }

Nginx配置生效

nginx -t
nginx -s reload

2.2 Harbor配置

2.2.1 安装Harbor

参照官网 https://goharbor.io

2.2.2 Harbor配置

编辑 Harbor 配置文件 vim harbor/harbor.yml,关闭http连接,配置https连接中证书信息,修改https端口号为8443,和nginx代理地址端口保持一致,使Harbor配置生效重启服务

3. 容器环境拉取和推送镜像证书认证设置

3.1 Docker配置

存放证书

/etc/docker/certs.d/reg.mydomain.com/ca.crt
/etc/docker/certs.d/reg.mydomain.com/client.cert
/etc/docker/certs.d/reg.mydomain.com/client.key

重启Doceker服务

systemctl restart docker

3.2 Containerd配置

ctr存放证书(Kubernetes默认使用)

vim /etc/containerd/config.toml
      [plugins."io.containerd.grpc.v1.cri".registry.configs]
        [plugins."io.containerd.grpc.v1.cri".registry.configs."reg.mydomain.com".tls]
          ca_file = "/etc/containerd/certs.d/reg.mydomain.com/ca.crt"
          cert_file = "/etc/containerd/certs.d/reg.mydomain.com/client.cert"
          key_file = "/etc/containerd/certs.d/reg.mydomain.com/client.key"

crictl和nerdctl存放证书

/etc/containerd/certs.d/reg.mydomain.com/ca.crt
/etc/containerd/certs.d/reg.mydomain.com/client.cert
/etc/containerd/certs.d/reg.mydomain.com/client.key

重启Containerd服务

systemctl restart containerd
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Carefree_666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值