用 acme.sh 自动申请与续期 Let's Encrypt 证书

运维HTTPS 发布于 2026-07-18 · 分类:Linux 运维 · 阅读 3,019

Let's Encrypt 证书有效期 90 天,手动续肯定会忘。acme.sh 纯 shell 实现,装好后自动写 cron,基本一劳永逸。

webroot 模式签发(不影响运行中的网站)

前提:域名 A 记录已指向本机,80 端口可访问,Nginx 站点 root 下能放验证文件。

# Nginx 里确保有:
#   location /.well-known/acme-challenge/ { root /var/www/site; }

~/.acme.sh/acme.sh --issue -d example.com     --keylength ec-256     -w /var/www/site     --server letsencrypt

签发成功后,不要直接用 ~/.acme.sh 里的文件,而是 --install-cert 安装到固定路径,并配置 reload 命令:

~/.acme.sh/acme.sh --install-cert -d example.com --ecc   --fullchain-file /etc/xxx/cert.pem   --key-file       /etc/xxx/private.key   --reloadcmd      "systemctl reload nginx"

自动续期原理

安装时 acme.sh 会往 crontab 加一条每天执行的任务,检测到证书快到期(默认 60 天内)就自动 renew,并执行你配置的 reloadcmd。查看:

crontab -l | grep acme
~/.acme.sh/acme.sh --list
坑:如果服务(比如某些代理程序)不会自动 reload 证书,续期后文件虽然更新了,进程里用的还是旧证书。务必在 reloadcmd 里把对应服务也重启/reload 掉。

— 本文为个人运维笔记,如有疏漏欢迎指正。