Lego生成ssl证书自动续期
文章目录
前期工作
文章原文(参考)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
文章作者 小花
上次更新 2026-01-09