使用 acme.sh 脚本自动申请并续签免费 SSL 证书

大家好,我是 33blog 的技术博主。今天想和大家分享一个非常实用的工具——acme.sh,它能够帮助我们自动申请和续签免费的 SSL 证书。在实际部署中,我多次使用它来为网站启用 HTTPS,过程简单且稳定。下面,我将一步步带你完成整个流程,包括一些我踩过的坑和解决方案。
1. 安装 acme.sh
首先,我们需要在服务器上安装 acme.sh。它支持多种安装方式,我推荐使用一键安装脚本,简单快捷。登录你的服务器(如 Linux VPS),执行以下命令:
curl https://get.acme.sh | sh
安装完成后,脚本会自动添加一个别名到你的 shell 配置中(如 ~/.bashrc)。你可以重新加载配置或重新登录来生效。acme.sh 默认使用 Let’s Encrypt 作为证书颁发机构(CA),它提供免费的 SSL 证书,非常适合个人和小型项目。
踩坑提示:如果服务器网络不稳定,安装可能会失败。建议先检查 curl 是否可用,或者尝试使用 wget 替代。另外,确保服务器时间正确,否则可能导致证书申请失败。
2. 申请 SSL 证书
acme.sh 支持多种验证方式,我常用的是 DNS 验证,因为它不需要暂停 Web 服务。假设你要为域名 example.com 申请证书,可以按以下步骤操作。
首先,使用 DNS API 方式(这里以 Cloudflare 为例,你需要提前获取 API 密钥):
export CF_Key="你的_Cloudflare_API_Key"
export CF_Email="你的_Cloudflare_邮箱"
acme.sh --issue --dns dns_cf -d example.com -d www.example.com
这个命令会为 example.com 和 www.example.com 申请一个通配符证书。acme.sh 会自动处理 DNS 记录验证,完成后证书会保存在 ~/.acme.sh/example.com/ 目录下。
实战经验:如果你使用其他 DNS 服务商,acme.sh 也支持许多内置插件,比如阿里云、GoDaddy 等。查看官方文档获取具体参数。申请过程中,如果遇到超时,可以尝试增加 –debug 参数来排查问题。
3. 安装证书到 Web 服务器
申请成功后,我们需要将证书安装到 Web 服务器(如 Nginx 或 Apache)。acme.sh 提供了方便的安装命令,可以自动复制证书到指定目录并重启服务。
以 Nginx 为例,假设你的配置目录是 /etc/nginx/,执行:
acme.sh --install-cert -d example.com
--key-file /etc/nginx/ssl/example.com.key
--fullchain-file /etc/nginx/ssl/example.com.cer
--reloadcmd "systemctl reload nginx"
这个命令会将私钥和证书链文件复制到 /etc/nginx/ssl/ 目录,并设置自动续签后重启 Nginx。记得提前创建 ssl 目录(mkdir -p /etc/nginx/ssl),否则会报错。
踩坑提示:如果服务器权限设置严格,可能需要用 sudo 执行。另外,确保 reloadcmd 中的命令可用,我曾在测试环境中因拼写错误导致续签失败。
4. 配置自动续签
acme.sh 的亮点之一是自动续签。安装时,它会添加一个定时任务(cron job),每天检查证书是否快过期(Let’s Encrypt 证书有效期为 90 天),并自动更新。
你可以手动查看定时任务:
crontab -l
如果看到类似 “0 0 * * * /root/.acme.sh/acme.sh –cron” 的行,说明自动续签已启用。无需额外操作,acme.sh 会静默处理。
实战经验:我建议定期检查证书状态,使用 acme.sh –list 查看所有证书。如果遇到续签问题,日志文件在 ~/.acme.sh/acme.sh.log,可以帮助快速定位。
5. 测试和验证
最后,别忘了测试证书是否生效。访问你的网站,确保浏览器显示 HTTPS 锁标志。你也可以用在线工具如 SSL Labs 测试评分。
如果需要手动强制续签(例如测试),可以运行:
acme.sh --renew -d example.com --force
这样,你就完成了整个流程。acme.sh 让 SSL 证书管理变得轻松,我再也不用担心证书过期问题了。
希望这篇教程对你有帮助!如果你在操作中遇到问题,欢迎在评论区留言,我会尽力解答。记得备份重要数据,祝你部署顺利!


这个工具真香,省了我好多事!👍