如果不是使用 CloudFlare DNS,需要自己配置 acme-dns

    注意,对应的网站需要在宝塔后台开启强制 SSL,这样宝塔才会在 Nginx 配置文件里设置对应的内容

    acme.sh

    首先安装 acme.sh

    HiCA - 安装 ACME.sh

    https://www1.hi.cn/docs/getting-started/acme.sh-installation/
    curl https://get.acme.sh -s | sh -s

    完成后通过 acme.sh --version 确认:

    # acme.sh --version
    https://github.com/acmesh-official/acme.sh
    v3.0.5

    开启自动更新:

    acme.sh  --upgrade  --auto-upgrade

    申请 Google Public CA 权限

    参照:kn007的个人博客 - 使用acme.sh和acme-dns申请Google免费泛域名SSL证书

    https://kn007.net/topics/using-acme-sh-and-acme-dns-get-googles-free-wildcard-ssl-certificate/存档

    获得 b64MacKeykeyId

    准备 CloudFlare DNS API

    参照:烧饼博客 - 使用 acme.sh 配置自动续签 SSL 证书 > 「使用 DNS 验证签发证书」

    https://u.sb/acme-sh-ssl/#%E4%BD%BF%E7%94%A8-dns-%E9%AA%8C%E8%AF%81%E7%AD%BE%E5%8F%91%E8%AF%81%E4%B9%A6存档

    编写脚本

    更新网站证书

    当申请证书完毕/更新后,会自动执行下面的脚本,请保存到 /path/to/GoogleCA_ACME.sh 文件中(/path/to/ 自己定义,同步修改后面「配置 acme.sh」脚本的 --reloadcmd

    保存后记得 chmod +x GoogleCA_ACME.sh

    tld_domain 填写要申请的顶级域名。

    当你宝塔后台的域名也是这个顶级域名时,可以把 forBtPanel 设置为 1,这样脚本会同步替换掉面板的 SSL 文件

    #!/bin/bash
    #-*- coding:utf-8 -*-
    
    # 自行修改
    tld_domain=""
    forBtPanel=1
    
    cd /www/wwwroot
    
    # 获取此域名顶级域名和二级域名列表
    count=0
    declare -a array
    for i in `ls`;do
        if [[ ${i} =~ ${tld_domain} ]]
        then
            array[${count}]=${i}
            count=$(expr ${count} + 1)
        fi
    done
    
    # 复制到对应域名目录
    for j in ${array[*]}
    do
        # 备份
        cp -rf /www/server/panel/vhost/cert/${j}/privkey.pem /www/server/panel/vhost/cert/${j}/privkey.pem.bak
        cp -rf /www/server/panel/vhost/cert/${j}/fullchain.pem /www/server/panel/vhost/cert/${j}/fullchain.pem.bak
    
        # 替换
        cp -rf /root/.acme.sh/${tld_domain}/server.rsa.key /www/server/panel/vhost/cert/${j}/privkey.pem
        cp -rf /root/.acme.sh/${tld_domain}/bundle.rsa.crt /www/server/panel/vhost/cert/${j}/fullchain.pem
    done
    
    /etc/init.d/nginx restart
    
    # 如果面板也要替换的话
    if [[ $forBtPanel -eq 1 ]]
    then
        # 备份
        cp -rf /www/server/panel/ssl/privateKey.pem /www/server/panel/ssl/privateKey.pem.bak
        cp -rf /www/server/panel/ssl/certificate.pem /www/server/panel/ssl/certificate.pem.bak
    
        # 替换
        cp -rf /root/.acme.sh/${tld_domain}/server.rsa.key /www/server/panel/ssl/privateKey.pem
        cp -rf /root/.acme.sh/${tld_domain}/bundle.rsa.crt /www/server/panel/ssl/certificate.pem
    
        #重载面板
        bt reload
    fi

    如果你在宝塔后台新建了一个网站(也是此顶级域名),可以手动执行这个脚本重新替换一次 SSL

    配置 acme.sh

    随便新建个 sh 文件执行就行,这个只需要执行一次,记得根据上面脚本的路径同步修改底下 --reloadcmd

    #!/bin/bash
    #-*- coding:utf-8 -*-
    
    email="你的 Google Cloud Platform 邮箱"
    b64MacKey=""
    keyId=""
    tld_domain=""
    CF_Token=""
    CF_Account_ID=""
    CF_Zone_ID=""
    
    if [ ! -d "/root/.acme.sh/${tld_domain}" ]; then
      mkdir /root/.acme.sh/${tld_domain}
    fi
    
    export CF_Token=${CF_Token}
    export CF_Account_ID=${CF_Account_ID}
    export CF_Zone_ID=${CF_Zone_ID}
    
    #申请证书
    /root/.acme.sh/acme.sh --set-default-ca --server google
    /root/.acme.sh/acme.sh --register-account --server google -m ${email} --eab-hmac-key ${b64MacKey} --eab-kid ${keyId}
    
    /root/.acme.sh/acme.sh --issue --dns dns_cf -d '*.'${tld_domain} -d ${tld_domain} \
    --cert-file /root/.acme.sh/${tld_domain}/server.rsa.crt \
    --key-file /root/.acme.sh/${tld_domain}/server.rsa.key \
    --fullchain-file /root/.acme.sh/${tld_domain}/bundle.rsa.crt \
    --ca-file /root/.acme.sh/${tld_domain}/issuer.rsa.crt \
    --reloadcmd "/path/to/GoogleCA_acme.sh"