• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Shell——harbor证书生成(httphotoshop)

武飞扬头像
北城 半夏
帮助1

脚本简介

  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

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgegckb
系列文章
更多 icon
同类精品
更多 icon
继续加载