#!/bin/bashHOST_NAME="192.168.1.101"PORT="8443"HOST_NAME="${HOST_NAME:-"$(hostname -f)"}"PORT="${PORT:-"443"}"CURRENT_DIR="$( cd "$(dirname "$0")" ; pwd -P )"HARBOR_HOME="${HARBOR_HOME:-"${CURRENT_DIR}"}"echo "HOST_NAME = ${HOST_NAME}"echo "PORT = ${PORT}"echo "HARBOR_HOME = ${HARBOR_HOME}"if [[ -d ${HARBOR_HOME}/ca ]]; then rm -rf ${HARBOR_HOME}/cafimkdir -p ${HARBOR_HOME}/cacd ${HARBOR_HOME}/ca# Generate a CA certificate private key.openssl genrsa -out ca.key 4096# Generate the CA certificate.openssl req -x509 -new -nodes -sha512 -days 3650 \ -subj "/C=CN/ST=Shandong/L=Yantai/O=haiyisoft/OU=Personal/CN=${HOST_NAME}" \ -key ca.key \ -out ca.crt# Generate a private key.openssl genrsa -out ${HOST_NAME}:${PORT}.key 4096# Generate a certificate signing request (CSR).openssl req -sha512 -new \ -subj "/C=CN/ST=Shandong/L=Yantai/O=haiyisoft/OU=Personal/CN=${HOST_NAME}" \ -key ${HOST_NAME}:${PORT}.key \ -out ${HOST_NAME}:${PORT}.csr# Generate an x509 v3 extension file.cat > v3.ext <<-EOFauthorityKeyIdentifier=keyid,issuerbasicConstraints=CA:FALSEkeyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEnciphermentextendedKeyUsage = serverAuthsubjectAltName = @alt_names[alt_names]DNS.1=${HOST_NAME}DNS.2=localhostDNS.3=localhost.domainEOF# Use the v3.ext file to generate a certificate for your Harbor host.openssl x509 -req -sha512 -days 3650 \ -extfile v3.ext \ -CA ca.crt -CAkey ca.key -CAcreateserial \ -in ${HOST_NAME}:${PORT}.csr \ -out ${HOST_NAME}:${PORT}.crt# Copy the server certificate and key into the certficates folder on your Harbor host.if [[ -d ${HARBOR_HOME}/cert ]]; then rm -rf ${HARBOR_HOME}/certfimkdir -p ${HARBOR_HOME}/certcp ${HOST_NAME}:${PORT}.crt ${HARBOR_HOME}/cert/cp ${HOST_NAME}:${PORT}.key ${HARBOR_HOME}/cert/# Convert ${HOST_NAME}.crt to ${HOST_NAME}.cert, for use by Docker.openssl x509 -inform PEM -in ${HOST_NAME}:${PORT}.crt -out ${HOST_NAME}:${PORT}.cert# Copy the server certificate, key and CA files into the Docker certificates folder on the Harbor host.# You must create the appropriate folders first.if [[ -d /etc/docker/certs.d/${HOST_NAME} ]]; then sudo rm -rf /etc/docker/certs.d/${HOST_NAME}:${PORT}fisudo mkdir -p /etc/docker/certs.d/${HOST_NAME}:${PORT}sudo cp ${HOST_NAME}:${PORT}.cert /etc/docker/certs.d/${HOST_NAME}:${PORT}/sudo cp ${HOST_NAME}:${PORT}.key /etc/docker/certs.d/${HOST_NAME}:${PORT}/sudo cp ca.crt /etc/docker/certs.d/${HOST_NAME}:${PORT}/# restart dockersudo systemctl restart docker