Let’s Encrypt证书自动续期

如果你正在为网站 HTTPS 证书过期而烦恼,希望找到一种可靠的自动续期方案,那么 acme.sh 配合 Let's Encrypt 是目前非常流行的选择。
本文将从零开始,带你完成 acme.sh 的安装、证书签发、自动续期配置以及常见问题处理,最终实现证书到期前自动更换,无需人工干预。

准备工作:环境与权限检查

在开始之前,请确保你拥有一台 Linux 服务器(本文以 CentOS 7 和 Ubuntu 20.04 为例),并已安装 curl 或 wget。
你需要一个已经解析到该服务器的域名,并且服务器 80 或 443 端口未被其他程序占用。
建议使用 root 用户或具有 sudo 权限的账号操作。

首先更新系统软件包并安装依赖:

# CentOS
sudo yum install -y curl socat
# Ubuntu
sudo apt update && sudo apt install -y curl socat

注意:acme.sh 支持多种验证方式,本文推荐使用 --standalone 模式,它会临时启动一个 Web 服务进行验证,适合没有运行 Web 服务的场景。
如果服务器已有 Nginx 或 Apache,也可使用 webroot 模式。

安装 acme.sh 并签发证书

acme.sh 是一个纯 Shell 脚本,安装过程简单。
执行以下命令,它会自动下载脚本并设置定时任务:

curl https://get.acme.sh | sh -s email=你的邮箱@example.com

安装完成后,需要重新加载 Shell 环境或退出重新登录,使 acme.sh 命令生效:

source ~/.bashrc

随后签发证书。
假设你的域名是 example.com,使用 standalone 模式:

~/.acme.sh/acme.sh --issue -d example.com -d www.example.com --standalone

如果 80 端口被占用,可以改用 --alpn 模式(需要 443 端口空闲):

~/.acme.sh/acme.sh --issue -d example.com -d www.example.com --alpn

重要:首次签发时,acme.sh 会自动向 Let's Encrypt 注册账户,并生成证书文件,默认保存在 ~/.acme.sh/example.com/ 目录下。

部署证书到 Web 服务

证书签发后,需要将其安装到 Web 服务器(如 Nginx)并配置续期后自动重载。
使用 --install-cert 命令:

~/.acme.sh/acme.sh --install-cert -d example.com \
--key-file       /etc/nginx/ssl/example.com.key \
--fullchain-file /etc/nginx/ssl/example.com.crt \
--reloadcmd      "systemctl reload nginx"
  • --key-file--fullchain-file 指定证书文件的存放路径,请确保目录存在且 Nginx 有读取权限。
  • --reloadcmd 定义证书更新后执行的命令,这里设置为重载 Nginx 使新证书生效。

然后修改 Nginx 配置文件,指向新的证书路径:

server {
    listen 443 ssl;
    server_name example.com www.example.com;
    ssl_certificate     /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    # 其他配置...
}

保存后测试 Nginx 配置并重载:

nginx -t && systemctl reload nginx

自动续期机制与验证

acme.sh 安装时会自动创建 cron 任务,每天检查证书是否即将到期(默认剩余 30 天时续期)。
你可以通过以下命令查看定时任务:

crontab -l | grep acme.sh

应该看到类似 0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null 的行。

验证自动续期:可以手动模拟续期过程,观察输出和证书文件时间戳变化:

~/.acme.sh/acme.sh --cron --home ~/.acme.sh

如果输出显示 Cert successSkipping, not yet due,说明续期逻辑正常。
也可以使用 --force 参数强制续期进行测试:

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

续期成功后,--reloadcmd 会自动执行,Nginx 会加载新证书,无需手动操作。

避坑指南:常见错误与处理

  • 80 端口被占用导致 standalone 验证失败:先停止占用端口的服务(如 systemctl stop nginx),验证完成后再启动。
  • Nginx 重载失败:检查 --reloadcmd 中的命令路径是否正确,确保 Nginx 有权限读取证书文件。
  • 证书文件权限问题:acme.sh 生成的证书默认在用户目录下,安装到 /etc/nginx/ssl 时需确保目录存在且权限为 644。
  • cron 任务未生效:确认 crontab 服务已启动,并且 acme.sh 的 cron 任务未被注释。
  • Let's Encrypt 速率限制:避免频繁测试签发,每周同一域名最多 5 次。测试时可使用 --staging 参数。

检查与维护建议

完成配置后,建议每月检查一次证书有效期和 cron 日志。
可以使用以下命令查看证书到期时间:

echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -dates

如果发现证书未自动续期,优先检查 acme.sh 的日志文件 ~/.acme.sh/acme.sh.log,根据错误提示调整配置。

小结:acme.sh 通过简单的命令和自动化的 cron 任务,让 Let's Encrypt 证书续期变得轻松可靠。
只要正确安装、部署并验证,就能彻底告别证书过期警告。
如果在操作中遇到问题,请先回看避坑部分,大部分错误都能找到对应解决方案。

分享到:
上一篇
UFW防火墙基础命令,Ubuntu服务器防护
下一篇
多域名SSL证书申请,统一HTTPS配置
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意