Acme.sh 对比 Certbot 哪个更适合自动续签 Let's Encrypt?

文章导读
对于大多数 Linux 服务器,acme.sh 因轻量且零依赖更适合自动化续签;若需深度集成特定 Web 服务器插件或偏好官方支持,Certbot 更稳妥。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 常见问题
  7. G 参考来源
A A

对于大多数 Linux 服务器,acme.sh 因轻量且零依赖更适合自动化续签;若需深度集成特定 Web 服务器插件或偏好官方支持,Certbot 更稳妥。

先说结论:acme.sh 适合追求轻量、脚本化及多 DNS API 支持的场景,Certbot 适合依赖官方插件及标准化运维的环境。

  • 适合:资源受限服务器、需频繁调用 DNS API 自动化、容器化环境
  • 重点看:依赖环境(Python vs Shell)、证书存储路径、续期任务配置方式
  • 别忽略:DNS 验证的权限配置、Web 服务器重载命令、rate limit 限制

命令速用版

以下命令可直接在终端执行,根据选择的工具二选一即可。

# acme.sh 安装与签发
curl https://get.acme.sh | sh
acme.sh `--issue` -d example.com `--standalone`

# Certbot 安装与签发
apt install certbot
certbot certonly `--standalone` -d example.com

为什么会这样

核心差异在于实现语言与依赖环境,直接决定了资源占用与维护成本。

acme.sh 是纯 Shell 脚本实现,无需 Python 或 OpenSSL 额外依赖,单文件即可运行,因此在 OpenWRT 路由器、Docker 微容器等低资源场景下表现更佳。Certbot 由 Let's Encrypt 官方推荐,基于 Python 开发,虽然文档完善且内置 Apache/Nginx 插件,但安装时会连带 Python 环境,占用空间相对较大。在自动化续签方面,acme.sh 内置 cron 任务安装,Certbot 通常需配合 systemd 定时器或系统自带 cron。

分步处理

按顺序执行安装、签发、自动续期配置,确保每一步都有明确反馈。

1. 安装工具

acme.sh 通过 curl 管道脚本安装,Certbot 通过系统包管理器安装。安装完成后检查版本确认环境就绪。

# 检查 acme.sh
acme.sh `--version`
# 检查 Certbot
certbot `--version`

2. 申请证书

推荐使用 DNS API 验证方式申请通配符证书,避免 HTTP 验证的文件路径权限问题。acme.sh 原生支持 60 多种 DNS 服务商 API,Certbot 需安装对应插件。

# acme.sh DNS 示例 (阿里云)
export Ali_Key="key"
export Ali_Secret="secret"
acme.sh `--issue` `--dns` dns_ali -d example.com -d *.example.com

# Certbot DNS 示例 (需插件)
certbot certonly `--dns-plugin` -d example.com

3. 配置自动续期

acme.sh 安装时自动添加 cron 任务,Certbot 需确认 systemd 定时器状态。确保证书更新后 Web 服务能自动重载。

# 检查 acme.sh 定时任务
crontab -l | grep acme.sh
# 检查 Certbot 定时器
systemctl list-timers | grep certbot

怎么验证是否生效

通过 OpenSSL 连接检查证书有效期,并查看工具日志确认续期状态。

1. 检查证书有效期

使用 openssl 命令连接服务器,查看 notAfter 字段是否更新。

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

2. 检查续期日志

Acme.sh 对比 Certbot 哪个更适合自动续签 Let's Encrypt?

acme.sh 日志位于~/.acme.sh/acme.sh.log,Certbot 日志位于/var/log/letsencrypt/letsencrypt.log。确认最近一次运行状态为 success。

常见坑

以下问题容易导致续期失败,配置时需提前规避。

1. 证书路径变更

acme.sh 默认证书存放在~/.acme.sh/域名/,Certbot 存放在/etc/letsencrypt/live/域名/。若 Web 服务器配置写死路径,升级工具时需注意 symlink 是否失效。

2. DNS API 权限不足

使用 DNS 验证时,API Key 需具备添加 TXT 记录的权限。若权限受限,验证会失败,建议先手动测试 API 连通性。

3. 频率限制

Let's Encrypt 对同一域名每周有签发次数限制。测试时请使用 Staging 环境,避免正式环境被锁。

常见问题

acme.sh 支持通配符证书吗?

支持,但必须使用 DNS 验证方式。

HTTP 验证无法证明对子域名的控制权,因此申请*.example.com 必须配置 DNS API 或手动添加 TXT 记录。

可以从 Certbot 迁移到 acme.sh 吗?

可以,但需重新签发证书。

两者证书存储格式兼容(PEM),但目录结构不同。迁移后需更新 Web 服务器的证书路径配置并重载服务。

哪个工具更节省内存?

acme.sh 更节省内存。

公开资料中没有看到可靠的量化数据,但基于 Shell 脚本的特性,其运行时内存占用通常低于基于 Python 的 Certbot。

参考来源

  • 知识库文章:Certbot vs acme.sh:哪款 ACME 客户端才是你的 SSL 管理利器?
  • 知识库文章:免费 SSL 证书、自动化续签证书,acme.sh 完整教程:安装、使用、常见错误及解决方案!
  • 知识库文章:uWebSockets 证书更新自动化工具:acme.sh 与 Certbot 对比
  • 知识库文章:1Panel 进阶技巧:用 acme.sh 自动续期 SSL 证书 (解决 Let's Encrypt 三个月过期难题)