
如果您正在租用 Linux 虚拟服务器并希望使用来自 Let's Encrypt 的免费 SSL 证书保护网站并启用 HTTPS,acme.sh 是一个值得考虑的优秀选择。相比于 Certbot,这个轻量级的 Shell 脚本简化了证书管理流程,无需 Python 依赖即可自动更新和续期 SSL 证书。无论您运行的是 Nginx、Apache 还是其他 Web 服务器,acme.sh 都能以最小的系统开销提供灵活高效的 SSL 证书管理解决方案。
什么是 acme.sh:纯 Shell 的 ACME 客户端
acme.sh 是一个用纯 Bash 语言编写的 ACME(自动证书管理环境)客户端。它通过 ACME 协议与 Let's Encrypt 或 ZeroSSL 通信,颁发 SSL/TLS 证书,而无需 Python 或其他编程语言的运行时环境。整个 acme.sh 脚本仅约 100 KB 大小,是目前最轻巧高效的 ACME 客户端之一。尽管文件小巧,acme.sh 却支持完整的证书生命周期管理:从证书申请、安装到续期和撤销。acme.sh 的简洁性使其特别吸引那些偏好轻量级、自包含工具的系统管理员,这类工具能无缝集成到现有基础设施中而不增加额外复杂性。
acme.sh 拥有活跃的开源社区,在 GitHub 上持续开发和维护。该项目已在全球数千台服务器的生产环境中验证。其流行度不仅源于其小巧的体积和简洁性,还在于其功能完整和文档详尽。许多经验丰富的 DevOps 工程师和系统管理员更倾向于选择 acme.sh,因为它具有可预测性、透明性和相比其他解决方案更低的资源占用。
为什么选择 acme.sh 而非 Certbot
虽然 Certbot 在 SSL 证书自动化领域占据主导地位,但 acme.sh 在多个方面具有吸引力的优势。首先,acme.sh 消除了对 Python 的依赖和版本管理的麻烦。某些最小化的虚拟服务器配置刻意排除 Python 以减少攻击面和降低资源消耗。Certbot 的 Python 依赖在没有 Python 或版本不兼容的系统上会成为问题。其次,acme.sh 内置支持超过 100 个 DNS 服务商的 API,包括 Cloudflare、DigitalOcean、AWS Route 53、Google Cloud DNS 等众多选择。这种广泛的 DNS 支持大幅简化了泛域名证书申请流程,无需开放端口 80 或 443——特别是当您的基础设施位于严格防火墙或负载均衡器之后时尤其有用。再次,acme.sh 的安装非常不具侵入性。它不会修改系统文件或需要系统级集成,而是完全存储在用户主目录中,给予您完全的控制权和透明度,卸载时也同样简便。
对于重视简洁性和控制权的虚拟服务器用户来说,acme.sh 通常是更好的选择。然而,如果您使用带有 DirectAdmin 的共享虚拟主机(如 AsiaGB 年费 500 泰铢起的方案),这个讨论就不相关了——DirectAdmin 已经内置了 Let's Encrypt 功能并自动续期。acme.sh 针对那些需要独立管理 SSL 证书、拥有完整 root 权限且希望不受托管服务商干扰的虚拟服务器用户。
acme.sh 的安装步骤
安装 acme.sh 需要通过 SSH 连接到虚拟服务器,并拥有 root 或 sudo 权限。整个安装过程简洁高效。首先,使用 curl 下载并执行安装脚本:curl https://get.acme.sh | sh。安装程序会创建 ~/.acme.sh 目录,复制 acme.sh 脚本到该位置,并自动配置日常计划任务以便证书续期。接下来,重新加载 Shell 环境以更新 PATH 变量:source ~/.bashrc,或者简单地登出并重新登入。最后,通过检查版本号验证安装成功:acme.sh --version。如果输出显示版本号,说明安装成功。整个过程耗时不超过一分钟,此阶段无需额外配置。acme.sh 现已准备就绪,可以申请第一张证书。
使用 Webroot 模式申请 SSL 证书
Webroot 模式是验证域名所有权和申请标准(非泛域名)证书的最简单方法。Let's Encrypt 会在您的 Web 根目录放置一个验证令牌,随后通过 HTTP 访问您的域名以验证所有权。此方法要求域名解析正确且端口 80 可访问。申请证书前,需要确定您的 Web 根目录路径(通常为 /home/username/public_html、/var/www/html 或 /home/username/www)。然后执行:acme.sh --issue -d yourdomain.com -d www.yourdomain.com -w /home/username/public_html。acme.sh 会向 Web 根目录写入验证文件,Let's Encrypt 获取并验证,成功后您的证书会存储在 ~/.acme.sh/yourdomain.com/ 中。证书文件(cert.pem 和 key.pem)现已准备好在您的 Web 服务器上安装。Webroot 模式可靠、可审计且适用于任何从该目录提供文件的 Web 服务器。
通过 DNS API 模式申请泛域名证书
如果您需要泛域名证书来覆盖 *.yourdomain.com 及其所有子域名,DNS API 模式是理想的解决方案。相比在 Web 根目录放置文件,acme.sh 会创建 DNS TXT 记录用于域名验证。即使端口 80 被阻止,此方法也能工作,并且单张泛域名证书可覆盖无限个子域名。要使用 DNS API 模式,首先从您的 DNS 服务商获取 API 凭证。例如,从 Cloudflare 仪表板生成 API Token,从 DigitalOcean 账户设置获取 API Key。然后,将凭证导出为环境变量:export CF_Token=\"your_cloudflare_api_token\"。最后,申请泛域名证书:acme.sh --issue -d yourdomain.com -d \"*.yourdomain.com\" --dns dns_cf。acme.sh 向 Let's Encrypt ACME 服务器查询,接收 DNS 质询,自动在您的 DNS 服务商创建 TXT 记录,等待传播,验证所有权,并颁发证书。整个过程自动化且通常在几分钟内完成。泛域名证书特别适合管理多个子域名的组织,消除了为每个子域名续期单独证书的需要。
在 Web 服务器中安装证书
成功申请证书后,下一步是在 Web 服务器中安装证书。acme.sh 通过 --installcert 参数简化了这一过程,它会复制证书到指定位置并自动重新加载 Web 服务器。对于 Nginx,命令为:acme.sh --installcert -d yourdomain.com --key-file /etc/nginx/ssl/yourdomain.com.key --fullchain-file /etc/nginx/ssl/yourdomain.com.crt --reloadcmd \"systemctl reload nginx\"。对于 Apache,替换 Apache 路径和重新加载命令:acme.sh --installcert -d yourdomain.com --key-file /etc/apache2/ssl/yourdomain.com.key --fullchain-file /etc/apache2/ssl/yourdomain.com.crt --reloadcmd \"systemctl reload apache2\"。acme.sh 会复制证书和密钥文件到指定位置并自动重新加载 Web 服务器以立即使用新证书。您的 Nginx 或 Apache 配置文件应该已经指向这些证书路径。安装后,更新您的 Web 服务器配置文件以引用这些证书位置,在部署前测试配置。使用这些标志运行 acme.sh 对大多数标准部署都够用。
使用 Cron 实现自动证书续期
acme.sh 最引人注目的功能之一是自动证书续期,且无需您进行任何额外设置。安装时,acme.sh 自动注册一个每天午夜 UTC 运行的计划任务。该任务检查 acme.sh 管理的所有证书,对任何即将在 30 天内过期的证书自动续期。续期在后台静默进行——除非出现问题,否则您不会收到任何通知。acme.sh 智能地处理续期细节:它采用与原始申请相同的方法(webroot 或 DNS API)验证域名,将续期后的证书安装到第一次安装时指定的路径,并自动重新加载 Web 服务器。要查看所有托管证书及其过期日期,运行:acme.sh --list。这会显示所有证书的摘要,包括颁发日期和过期日期。如果您需要立即强制续期特定证书(例如在更改 DNS 服务商后),使用:acme.sh --renew -d yourdomain.com --force。在实际应用中,大多数用户在初始设置后无需手动续期证书——acme.sh 自动处理一切,零停机。
acme.sh 常见问题排查
尽管 acme.sh 可靠性很高,部署有时仍会遇到值得理解的问题。如果申请失败,首先验证域名解析是否正确:从您的虚拟服务器上运行 curl www.yourdomain.com 和 curl yourdomain.com,两者都应该成功加载。防火墙配置是另一个常见原因——webroot 模式需要互联网访问端口 80(HTTP);如果从虚拟服务器内部测试成功但申请失败,您的防火墙可能阻止了传入连接。改用 DNS API 模式可以绕过此限制。如果使用 DNS API 模式,验证 API 凭证是否正确且 DNS 服务商配置恰当。查看 acme.sh 日志获取详细错误信息:acme.sh --log 显示最近的操作和遇到的任何错误。Let's Encrypt 还强制实施频率限制:每个域名每 7 天最多可颁发 50 张证书。如果在故障排除期间重复测试申请,您可能会触及此限制并收到\"已颁发太多证书\"的错误。使用 --staging 标志允许针对 Let's Encrypt 的测试环境进行测试,不受频率限制:acme.sh --issue -d yourdomain.com --dns dns_cf --staging。测试成功后,移除 --staging 以申请生产证书。
acme.sh 的应用场景和理想情况
acme.sh 在多个特定场景中表现出色。Linux 虚拟服务器用户如果希望独立管理证书,不受托管服务商限制,会从 acme.sh 的自主性中获益良多。开发团队在多个微服务或 API 上部署应用时,通常需要跨多个子域名和 API 管理众多 SSL 证书;acme.sh 的泛域名支持和脚本能力简化了此工作流。标准化开源工具的组织倾向于选择 acme.sh,因为它具有透明性和社区治理。管理数千台服务器的系统管理员欣赏 acme.sh 的最小资源占用和可预测的运作方式。最后,非常规 Web 服务器用户或专用部署(嵌入式系统、容器化应用、边缘计算平台)发现 acme.sh 的可移植性和无依赖特性无价。如果您已租用 AsiaGB 的虚拟服务器(Linux 月费 500 泰铢起),acme.sh 立即可用,无需安装额外软件或受控制面板功能限制。
专业提示:AsiaGB 虚拟服务器方案(Linux 月费 500 泰铢,Windows 月费 750 泰铢)提供完整的 root 权限访问,数据中心分别位于泰国和新加坡。通过 SSH 连接并安装 acme.sh 后,您可以立即免费从 Let's Encrypt 申请 SSL 证书。将 acme.sh 与现有 Web 服务器配置结合使用,为所有服务启用 HTTPS,费用完全零成本,无需虚拟服务器订阅费用外的额外支出。
acme.sh 的限制和重要注意事项
虽然 acme.sh 在许多场景中表现优异,理解其限制可以确保合适的应用。acme.sh 需要 SSH 访问和 root 或 sudo 权限——访问受限的共享虚拟主机环境无法使用 acme.sh。如果您的虚拟主机提供商采用 DirectAdmin 或类似控制面板且内置 Let's Encrypt 支持,使用 acme.sh 反而增加复杂性而无收益。防火墙和网络配置显著影响 acme.sh 功能——限制性防火墙阻止端口 80 的情况下需采用 DNS API 模式,DNS 查询过滤可能需要变通方案。Let's Encrypt 频率限制(每个域名每 7 天 50 张证书)影响频繁测试的用户;始终在测试期间采用测试环境模式。最后,acme.sh 的简洁性意味着您承担完全的证书管理责任——不存在自动回滚、备份或恢复机制,误删证书文件或配置续期错误时无法自动恢复。对于重视托管手段和白手套支持的企业虚拟主机环境,高端 SSL 服务可能更适合,尽管成本更高。对于技术水平高的用户和系统管理员,acme.sh 提供无与伦比的灵活性和控制权。
准备好在虚拟服务器上部署 acme.sh
如果您需要 root 权限独立管理 SSL 证书,考虑租用 AsiaGB 的 Linux 虚拟服务器。拥有完整 root 权限、泰国和新加坡数据中心提供最优延迟,价格从月费 500 泰铢起,acme.sh 可完美集成到您的基础设施中,实现免费 SSL 证书自动化。
了解虚拟服务器方案