linux系统下nginx网站ssl证书自动续签

本文使用 acme.sh + 自动续签 + Nginx reload

1.安装 acme.sh

curl https://get.acme.sh | sh

acme.sh 在申请证书时,默认使用 ZeroSSL 作为 CA(证书颁发机构),ZeroSSL 免费额度有限(通常每月 3 张 DV 证书免费),超过后需要付费

如果你想继续用 Let’s Encrypt(完全免费,无次数限制),需要手动指定:

~/.acme.sh/acme.sh --set-default-ca --server letsencrypt

2.确认验证目录目录

首先需要确认网站根目录,通常在nginx配置中的root标识行,如果没有设置过网站根目录,则是nginx默认的目录,可以检查以下目录是否是网站根目录

ls /usr/local/nginx/html
ls /etc/nginx/html
ls /usr/share/nginx/html

 创建验证目录并赋予权限

mkdir -p /usr/local/nginx/html/.well-known/acme-challenge/
chmod -R 755 /usr/local/nginx/html/.well-known

 

3. 申请证书

假设你的网站是 example.com,网站根目录是 /usr/local/nginx/html :

~/.acme.sh/acme.sh --issue -d example.com -w /usr/local/nginx/html
  • -d example.com :域名

  • -w /var/www/html :HTTP 验证路径,对应 nginx 配置里 root 的路径

如果你有 www.example.com 也要加上:

~/.acme.sh/acme.sh --issue -d example.com -d www.example.com -w /usr/local/nginx/html

 

4.安装证书到你指定路径

~/.acme.sh/acme.sh --install-cert -d example.com \
--key-file /root/ssl_certs/example.com.key \
--fullchain-file /root/ssl_certs/example.com.pem \
--reloadcmd "systemctl reload nginx"

如果提示重启nginx失败,可以手动执行命令重启,如 systemctl restart nginx.service

 

5.检查自动更新

crontab -l

应该能看到类似:

0 0 * * * "~/.acme.sh"/acme.sh --cron --home "~/.acme.sh" > /dev/null

acme.sh 会每天检查一次证书是否快到期(30 天内),自动续签并执行 --reloadcmd

手动测试续签:

~/.acme.sh/acme.sh --renew -d example.com --force

 

 

注:以上方案由ChatGPT生成

 

posted @ 2025-09-24 19:22  冬音  阅读(32)  评论(0)    收藏  举报