脚本简介

  1. 基于运维统一脚本中,4、实用shell脚本下的1) 实用shell脚本选项harbor证书生成脚本
  2. 系统版本Centos7

脚本注解

  1. 该脚本为生成harbor的自签证的证书,给harbor去使用
  2. 把该脚本复制到部署harbor的服务器上,修改完成配置后,执行脚本即可
  3. 执行脚本结束后,所需的证书存放在脚本所在目录下的ssl
  4. harbor使用的证书:cd ssl/data/目录下
  5. docker客户端使用:cd ssl/certs.d目录下,并且打包成certs_d.tar.gz,只要把这个安装包存放到/etc/docker/

修改方式

city="Shanghai"
#证书的域名
domain_name="registry.harbor.cn"
#harbor中对外访问的端口,默认443,可根据实际情况去填写
domain_port="443"
  1. 根据访问arbor的域名来确认生成的ssl证书文件,根据实际情况填写,端口可根据实际情况修改
  2. 默认443,如果使用IP地址访问,则是没有问题
  3. 如果不是443,且脚本的端口未修改,则会导致其他docker客户端登录harbor服务时,则会出现证书不正确的情况,切记!!!

问题记录

443端口被占用后

端口被占用后,使用其他的端口进行访问,但是在使用证书登录的时候,可能会报错报错日志尚未留存

[root@myos certs.d]$ls
registry.harbor.com:8443
[root@myos certs.d]$pwd
/etc/docker/certs.d

根据端口,修改证书的目录名称即可

登录私有仓库时出错

daemon.json文件以配置,且重启后加载成功

[root@myos docker]$cat daemon.json 
{
   "insecure-registries": ["192.168.1.123:443"],
  "registry-mirrors": ["https://geuj9lut.mirror.aliyuncs.com"]
}

在登录时依旧报错

docker login -u admin -p Harbor12345 192.168.1.123:443
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "https://192.168.1.123:443/v2/": unable to decode token response: invalid character '<' looking for beginning of value

解决方式

  1. 查看harbor 下的common/config/registry/config.yml
。。。
token:
    issuer: harbor-token-issuer
    realm: https://www.harbor.com/service/token
    rootcertbundle: /etc/registry/root.crt
    service: harbor-registry
validation:
  disabled: true
。。。
  1. 修改需要登录的主机的/etc/hosts文件,添加域名与地址之间的管理
  2. 修改daemon.json文件以配置,且重启后加载成功
  3. 重新使用域名登录。。。
[root@myos docker]$docker login -u admin -p Harbor12345 www.harbor.com
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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

注意:使用域名部署的harbor,登陆时也要使用域名。。。!!!

执行方式

	sh harbor_ssl.sh

脚本内容

#!/bin/bash
##########################################################################################
#定义变量
basepath=$(cd `dirname $0`; pwd)
city="Shanghai"
#证书的域名
domain_name="registry.harbor.cn"
#harbor中对外访问的端口,默认443,可根据实际情况去填写
domain_port="443"
damain_cerds_name="${domain_name}:${domain_port}"
domain_name1=`echo $domain_name |awk -F . '{print $1"."$2}'`
domain_name2=`echo $domain_name |awk -F . '{print $2}'`
#将服务器证书和密钥复制到Harbor主机上的certficates文件夹中
ssl_path="ssl"
ssl_path_vlome="data"
#crt文件解释为CA证书,并将.cert文件解释为客户端证书
cert_path="${ssl_path}/certs.d/${damain_cerds_name}"
cert_path_vlome="certs.d/${damain_cerds_name}"
##########################################################################################
info(){
echo -e "\033[35m [`hostname` `whoami` `date '+%Y-%m-%d %H:%M:%S'`]\033[0m " "\033[34m$1\033[0m"
}
#####################################################
#生成CA证书私钥
ca_key(){
  openssl genrsa -out ca.key 4096  &>/dev/null
  openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=${city}/L=${city}/O=example/OU=Personal/CN= ${domain_name}" \
 -key ca.key \
 -out ca.crt &>/dev/null
}

#生成私钥
key(){
   openssl genrsa -out ${domain_name}.key 4096 &>/dev/null
}
#生成证书签名请求(CSR)
csr(){
openssl req -sha512 -new \
    -subj "/C=CN/ST=${city}/L=${city}/O=example/OU=Personal/CN=${domain_name}" \
    -key ${domain_name}.key \
    -out ${domain_name}.csr &>/dev/null
}
#生成一个x509 v3扩展文件
v3_ext(){
echo "
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=${domain_name}
DNS.2=${domain_name1}
DNS.3=${domain_name2}
" > v3.ext
}
#使用该v3.ext文件为您的Harbor主机生成证书。
Harbor_v3(){
openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in ${domain_name}.csr \
    -out ${domain_name}.crt &>/dev/null
}
#提供证书给Harbor和Docker
docker_crt(){
[ -d ${ssl_path_vlome} ] || mkdir -p ${ssl_path_vlome}
[ $? -eq 0 ]&& info "${ssl_path_vlome}创建成功"
cp ${domain_name}.crt ${ssl_path_vlome}
cp ${domain_name}.key ${ssl_path_vlome}
}
#Docker守护程序将.crt文件解释为CA证书,并将.cert文件解释为客户端证书
docker_cert(){
openssl x509 -inform PEM -in ${domain_name}.crt -out ${domain_name}.cert &>/dev/null
cp ${domain_name}.cert  ${cert_path_vlome}
cp ${domain_name}.key   ${cert_path_vlome}
cp ca.crt  ${cert_path_vlome}
}
run_ca_start(){
info "生成CA证书私钥,请等待!!!"
ca_key
info "生成CA证书"
key
info "生成证书签名请求(CSR)"
csr
info "生成一个x509 v3扩展文件"
v3_ext
info "使用该v3.ext文件为您的Harbor主机生成证书"
Harbor_v3
info "提供证书给Harbor和Docker"
docker_crt
info "Docker守护程序将.crt文件解释为CA证书,并将.cert文件解释为客户端证书"
docker_cert
info "把certs.d目录打包成certs_d.tar.gz,复制其他docker客户端"
tar -zcf certs_d.tar.gz certs.d
if [ $? -eq 0 ];then
   info "复制到docker客户端的/etc/docker/目录下"
   info "执行tar -xvf ${domain_name}.tar.gz,解压到当前路径"
   info "在daemon.json文件中添加\"insecure-registries\": [\"${domain_name}\"] "
   else
   exit 0
fi
}
[ -d ${basepath}/${ssl_path} ] || mkdir -p ${basepath}/${ssl_path}
[ $? -eq 0 ]&& info "${basepath}/${ssl_path}创建成功"
[ -d ${basepath}/${cert_path} ] || mkdir -p ${basepath}/${cert_path}
[ $? -eq 0 ]&& info "${basepath}/${cert_path}创建成功"
cd ${basepath}/${ssl_path}
run_ca_start

GitHub 加速计划 / ha / harbor
23.24 K
4.68 K
下载
Harbor 是一个开源的容器镜像仓库,用于存储和管理 Docker 镜像和其他容器镜像。 * 容器镜像仓库、存储和管理 Docker 镜像和其他容器镜像 * 有什么特点:支持多种镜像格式、易于使用、安全性和访问控制
最近提交(Master分支:2 个月前 )
9e55afbb pull image from registry.goharbor.io instead of dockerhub Update testcase to support Docker Image Can Be Pulled With Credential Change gitlab project name when user changed. Update permissions count and permission count total Change webhook_endpoint_ui Signed-off-by: stonezdj <stone.zhang@broadcom.com> Co-authored-by: Wang Yan <wangyan@vmware.com> 9 天前
3dbfd422 Signed-off-by: wang yan <wangyan@vmware.com> 10 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐