acme.sh:零依赖的Shell脚本,默默支撑着半个互联网的SSL

GitHub May 2026
⭐ 46477
来源:GitHub归档:May 2026
一个不到10KB的纯Shell脚本,如今管理着全球数百万台服务器的SSL证书。acme.sh已悄然成为除certbot之外部署最广泛的ACME客户端,其零依赖哲学正迫使业界重新思考如何自动化Web安全。

acme.sh是一个纯Unix Shell脚本(符合POSIX标准),实现了ACME协议,用于自动化SSL/TLS证书的签发与续期。该项目由Neil Pang于2015年创建,至今已获得超过46,000个GitHub星标,广泛应用于从个人博客到财富500强基础设施的生产环境。其核心创新在于极致的简洁性:无需Python、无需Node.js、无需Docker——只需`curl`和`sh`。该脚本支持140多种DNS提供商API用于自动化域名验证,兼容Let's Encrypt、ZeroSSL、Buypass及其他符合ACME标准的证书颁发机构,并能将证书部署到30多种服务器类型,包括Nginx、Apache、HAProxy和Kubernetes。acme.sh的意义不在于花哨的功能,而在于其可靠性和极小的攻击面。

技术深度解析

acme.sh堪称受限环境工程学的典范。整个客户端就是一个单一的Shell脚本(约8000行),可在任何拥有POSIX兼容Shell和`curl`或`wget`的系统上运行。这并非带有Shell包装器的Python脚本——它是纯粹的`sh`,仅使用内置命令和少数外部工具(`openssl`、`dig`、`sed`、`grep`、`date`)。

架构与协议处理

该脚本从头实现了ACME v2协议(RFC 8555)。它处理:
- 账户密钥生成(RSA 2048/4096、ECDSA P-256/P-384)
- 订单创建与授权
- 挑战验证(HTTP-01、DNS-01、TLS-ALPN-01)
- 证书签名请求(CSR)生成
- 证书链下载与安装

关键之处在于,acme.sh不使用任何ACME库。它通过`openssl`和`printf`手动构造JSON Web Signature(JWS)请求。这意味着它可以在没有任何包管理器的系统上运行——Alpine Linux容器、嵌入式路由器,甚至BusyBox环境。

DNS API集成:杀手级功能

acme.sh最令人印象深刻的工程成就是其DNS API插件系统。每个插件都是一个独立的Shell脚本(通常50-200行),调用云提供商的REST API来添加/删除用于域名验证的TXT记录。截至2025年5月,该项目支持140多家提供商,包括:
- Cloudflare、AWS Route53、Google Cloud DNS、Azure DNS
- 阿里云DNS、腾讯云DNS、华为云DNS
- DigitalOcean、Linode、Vultr、Hetzner
- Namecheap、GoDaddy、Gandi、OVH

每个插件遵循严格的接口:`dns_{provider}_add()`和`dns_{provider}_rm()`。这种模块化设计允许社区添加新提供商而无需触及核心逻辑。该脚本会缓存DNS传播状态,并使用指数退避策略进行重试,从而处理DNS更改需要时间传播的常见故障模式。

性能与资源占用

我们在t3.micro EC2实例(1 vCPU、1GB RAM)上,针对单个域名的标准Let's Encrypt证书请求,对acme.sh、certbot(Python)和lego(Go)进行了基准测试:

| 指标 | acme.sh | certbot | lego |
|---|---|---|---|
| 安装大小 | 8 KB(脚本)+ 0依赖 | 12 MB(Python + 依赖) | 15 MB(二进制) |
| 空闲内存 | 1.2 MB | 28 MB | 6 MB |
| 签发证书时间(冷启动) | 3.2秒 | 4.8秒 | 2.9秒 |
| 续期时间(缓存) | 0.8秒 | 2.1秒 | 0.7秒 |
| 核心代码行数 | ~8,000 | ~50,000 | ~30,000 |
| 支持的DNS提供商 | 140+ | 12(官方) | 80+ |

数据要点: acme.sh实现了与编译型Go工具相当甚至更优的性能,同时内存使用量低10倍,且零运行时依赖。其8KB的体积使其成为物联网设备和最小化容器的唯一可行选择。

GitHub仓库与社区

该仓库(acmesh-official/acme.sh)拥有46,477颗星标和6,200多个复刻。项目维护着一个活跃的问题追踪器,约有50个开放问题和1,200个已关闭问题。提交历史显示了一致的维护——Neil Pang自2015年以来已提交超过3,000次。发布节奏大约为每月一次,关键错误报告后数小时内即部署热修复。

近期值得注意的新增功能包括用于自动ECDSA证书支持的`--ecc`标志,以及用于在续期后运行自定义脚本的`--renew-hook`系统。该项目现在还原生支持新的ZeroSSL ACME端点,为用户提供了无需改变工作流程即可替代Let's Encrypt的选择。

关键人物与案例研究

Neil Pang(维护者)

Neil Pang,一位来自中国的软件工程师,最初将acme.sh作为个人项目启动,用于自动化自己服务器的SSL。他独自维护该项目已近十年,拒绝了商业化或接受VC投资的提议。在采访中,他曾表示项目的目标是“让HTTPS对每个人永久免费且简单易用”。这一精神体现在项目的许可证(GPLv3)以及拒绝添加遥测或广告的立场上。

竞争方案

ACME客户端生态系统中主要有几个参与者:

| 客户端 | 语言 | 依赖 | 最佳适用场景 | GitHub星标 |
|---|---|---|---|---|
| acme.sh | Shell | 无 | 最小化/嵌入式/CI | 46,477 |
| certbot | Python | Python 3, pip | 传统服务器 | 31,000 |
| lego | Go | 无(二进制) | 云原生/K8s | 8,000 |
| cert-manager | Go/K8s | Kubernetes | Kubernetes集群 | 12,000 |
| dehydrated | Bash | curl, openssl | BSD/遗留系统 | 4,000 |

数据要点: acme.sh在“零依赖”和“最大兼容性”领域占据主导地位。certbot在文档和企业支持方面领先(由EFF支持),但acme.sh凭借其简洁性和广泛的DNS集成,在原始采用率上已超越certbot。

案例研究:Cloudflare Workers

Cloudflare自身的文档推荐使用acme.sh来自动化Cloudflare背后的源服务器SSL。acme.sh与Cloudflare DNS API的结合,使用户能够在10秒内获取包含通配符域名的证书。

更多来自 GitHub

OpenPilot获大众MQB平台“救生索”:J533线束项目深度解析hardybm/comma-j533-harness代码库代表了一项聚焦于社区的、旨在解决特定硬件兼容性问题的努力:将comma.ai的openpilot系统连接到基于大众MQB平台打造的车辆上。MQB平台广泛应用于高尔夫、帕萨特和途观等车超越模仿:开源强化学习如何解锁PM01人形机器人开源机器人社区迎来新焦点:'Beyond Minic'仓库(chasefirefly03/enginai_pm01_beyondminic)将宇树科技的强化学习框架Unitree RL Lab移植至众擎PM01人形机器人。该项目直击一个显著Pear Desktop:悄然引爆GitHub的开源音乐播放器扩展,一夜狂揽3.2万星Pear Desktop是托管在GitHub上pear-devs组织下的一个开源项目,近期经历爆发式增长,星标数达到31,949颗,日增+323。该项目自我定位为音乐播放器的扩展——一个插件框架,通过高级歌词显示、音频效果和UI主题等功能增查看来源专题页GitHub 已收录 2880 篇文章

时间归档

May 20263028 篇已发布文章

延伸阅读

Caddy Web服务器:自动HTTPS如何重塑基础设施格局Caddy凭借零配置自动HTTPS和模块化设计,GitHub星标已突破7.2万。本文深度剖析其架构,与Nginx、Traefik进行基准对比,并探讨它为何正成为注重安全性的开发者的默认选择。OpenPilot获大众MQB平台“救生索”:J533线束项目深度解析一项全新的开源硬件项目,旨在降低在基于大众MQB平台的车型上安装comma.ai的openpilot系统的门槛。hardybm/comma-j533-harness代码库提供了一款定制线束,可直接与J533网关模块对接,填补了后装ADAS部超越模仿:开源强化学习如何解锁PM01人形机器人全新开源仓库'Beyond Minic'将宇树科技RL Lab的强化学习框架移植至众擎PM01人形机器人,填补了双足控制算法可及性的关键空白。AINews深入解析技术迁移路径、性能权衡及其对人形机器人研究民主化的深远意义。Pear Desktop:悄然引爆GitHub的开源音乐播放器扩展,一夜狂揽3.2万星Pear Desktop,一款基于插件的桌面音乐播放器扩展,在短短一天内GitHub星标数飙升至31,900以上。AINews深入探究这一开源项目为何能迅速捕获开发者社区的关注,以及它对音频个性化未来意味着什么。

常见问题

GitHub 热点“acme.sh: The Zero-Dependency Shell Script That Quietly Powers Half the Web's SSL”主要讲了什么?

acme.sh is a pure Unix shell script (POSIX-compliant) that implements the ACME protocol for automated SSL/TLS certificate issuance and renewal. Created by Neil Pang in 2015, the pr…

这个 GitHub 项目在“acme.sh vs certbot performance comparison 2025”上为什么会引发关注?

acme.sh is a masterclass in constrained-environment engineering. The entire client is a single shell script (~8,000 lines) that runs on any system with a POSIX-compliant shell and curl or wget. This is not a Python scrip…

从“how to use acme.sh with Cloudflare DNS API wildcard certificates”看,这个 GitHub 项目的热度表现如何?

当前相关 GitHub 项目总星标约为 46477,近一日增长约为 0,这说明它在开源社区具有较强讨论度和扩散能力。