前期工作

文章原文(参考)82.Lego生成ssl证书

主要适配阿里云dns的域名

根据 阿里云 DNS 代理配置说明 得知需要去阿里云申请 API 授权,得到参数

登陆阿里云控制台

访问控制 > 用户 > 新建用户

登陆名: dns

显示名: dns

访问方式: OpenAPI 调用访问

创建后,添加权限: AliyunDNSFullAccess

最终得到 AccessKey ID、AccessKeySecret

支持手动验证,请参考顶部文章82.Lego生成ssl证书

创建并进入目录
mkdir -p /usr/local/nginx/cert && cd /usr/local/nginx/cert

下载 lego	
wget https://github.com/go-acme/lego/releases/download/v4.14.2/lego_v4.14.2_linux_amd64.tar.gz

如果下载很慢可以科学上网下载后手动上传 https://github.com/go-acme/lego/releases/

github发行版地址,可自行选择版本,当前linux_amd64

解压你下载的文件

tar -xvf lego_v4.14.2_linux_amd64.tar.gz lego

给 lego 赋予可执行权限

chmod +x /usr/local/nginx/cert/renew_cert.sh

自动续期脚本 renew_cert.sh

vi renew_cert.sh

脚本

#!/bin/bash

# 设置阿里云 API 密钥
export ALICLOUD_ACCESS_KEY="LTA"
export ALICLOUD_SECRET_KEY="keF"

# 设置证书存储路径
CERT_DIR="/usr/local/nginx/cert/.lego"
LOG_FILE="/usr/local/nginx/cert/cert_renew.log"
DOMAIN="xhbhs.cn"
LEGO_BIN="/usr/local/nginx/cert/lego"
NGINX_BIN="/usr/local/nginx/sbin/nginx"

NOW_CN=$(date '+%Y年%m月%d日 %H时%M分%S秒')

# 执行续期
$LEGO_BIN --email="1523343358@qq.com" \
  --dns alidns \
  --domains="*.xhbhs.cn" \
  --domains="xhbhs.cn" \
  --path="$CERT_DIR" \
# 第一次执行先使用 run 第一次执行创建账户 需要输入需要确认 并输入y 
run
# 之后续签使用这个 要删除run
renew --days=30 >> "$LOG_FILE" 2>&1

RENEW_RESULT=$?

if [ $RENEW_RESULT -eq 0 ]; then
    # 判断是否真的发生了续期
    if grep -q "Your certificate is up to date" "$LOG_FILE"; then
        echo "【$NOW_CN$DOMAIN 证书未到期,无需续期" >> "$LOG_FILE"
    else
        echo "【$NOW_CN$DOMAIN 证书续期成功,重载 nginx" >> "$LOG_FILE"
        $NGINX_BIN -s reload
    fi
else
    echo "【$NOW_CN】❌ $DOMAIN 证书续期失败,请立即检查" >> "$LOG_FILE"
fi

生成后的证书文件在

/usr/local/nginx/cert/.lego/certificates/

配置nginx

ssl_certificate     /usr/local/nginx/cert/.lego/certificates/_.xhbhs.cn.crt;
ssl_certificate_key /usr/local/nginx/cert/.lego/certificates/_.xhbhs.cn.key;

定时续期 crontab 定时任务(每天 02:30

1️⃣ 编辑 crontab

crontab -e

添加 insert

30 2 * * * /bin/bash /usr/local/nginx/cert/renew_cert.sh >> /usr/local/nginx/cert/cert_renew.log 2>&1

检查是否成功

crontab -l