文章目录
- acme.sh:用 Shell 脚本搞定 SSL 证书申请和续期
- 为什么需要它
- 支持哪些 CA 和验证方式
- 安装和使用
- 跨平台和兼容性
- 实际使用场景
acme.sh:用 Shell 脚本搞定 SSL 证书申请和续期
acme.sh 在 GitHub 上已经拿到 47K Star 了。
这个项目做的事情很明确——用纯 Shell 脚本实现 ACME 协议,自动申请和续期 SSL 证书。不需要 Python,不需要 Node,一个 Shell 脚本就够了。
为什么需要它
做过 HTTPS 部署的人都知道,证书这件事说简单也简单,说麻烦也麻烦。Let’s Encrypt 提供免费证书,但申请流程要走 ACME 协议,续期要定时跑,多域名、通配符证书的配置各有讲究。手动操作容易忘,过期了网站就挂。
acme.sh 把这套流程封装成一个 Shell 脚本。装好之后,证书申请、续期、安装到 Nginx 或 Apache,全自动化。默认 30 天续期一次,还支持 RFC 9773 的 ARI 续期建议机制,CA 那边说什么时候该换,脚本自己会跟着调整。
支持哪些 CA 和验证方式
默认用 ZeroSSL,也支持 Let’s Encrypt、SSL.com、Google Public CA、Actalis,以及任何符合 RFC 8555 标准的 CA。
验证方式有好几种:
- Webroot 模式:用现有网站目录验证
- Standalone 模式:脚本自己起一个 HTTP 服务在 80 端口
- TLS-ALPN 模式:走 443 端口验证
- Apache/Nginx 模式:直接对接 Web 服务器做验证
- DNS 模式:通过 DNS TXT 记录验证,支持通配符证书
- DNS Persist 模式:放一条长期 TXT 记录,后续续期不用再改 DNS
大部分 DNS 服务商都有 API 集成,Cloudflare、阿里云、腾讯云这些常见的都覆盖了。没有 API 的也能手动加 TXT 记录,只是续期时得再操作一次。
安装和使用
安装就一行:
curlhttps://get.acme.sh|sh-semail=my@example.com装完之后自动配好 cron 任务,每天检查一次是否需要续期。
申请单域名证书:
acme.sh--issue-dexample.com-w/var/www/html多域名或通配符:
acme.sh--issue-dexample.com-d'*.example.com'--dnsdns_cf申请完把证书装到 Nginx:
acme.sh --install-cert-dexample.com\--key-file /etc/nginx/key.pem\--fullchain-file /etc/nginx/cert.pem\--reloadcmd"service nginx force-reload"续期后会自动执行 reloadcmd,不用手动重启服务。
跨平台和兼容性
acme.sh 在测试矩阵里覆盖了二十多个平台:各种 Linux 发行版、macOS、FreeBSD、OpenBSD、NetBSD、Solaris、Windows(通过 Cygwin),甚至 Haiku OS 和 OpenWRT。Shell 层面兼容 Bash、dash、sh。
不需要 root 权限就能运行,证书放在用户目录下。Docker 也能用,官方提供了镜像。
实际使用场景
acme.sh 被 FreeBSD.org、Proxmox、pfsense、discourse.org 这些项目用在生产环境里。一个 Shell 脚本能跑这么多年、覆盖这么多平台,靠的不是花哨的功能,就是把证书管理这件事做扎实了。
对于个人站长或小团队,装一次就不用管了。对于运维批量管理多台服务器的场景,Shell 脚本的优势在于部署简单,不需要额外的运行时依赖。
扎实了。
对于个人站长或小团队,装一次就不用管了。对于运维批量管理多台服务器的场景,Shell 脚本的优势在于部署简单,不需要额外的运行时依赖。