Let's Encrypt 证书有效期 90 天,手动续肯定会忘。acme.sh 纯 shell 实现,装好后自动写 cron,基本一劳永逸。
前提:域名 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 掉。
— 本文为个人运维笔记,如有疏漏欢迎指正。