位卑未敢忘忧国,事定犹须待盖棺。—— 陆 游《病起》

https://github.com/acmesh-official/acme.sh

acme.sh:轻量级的自动化证书管理工具

在现代 Web 开发中,HTTPS 已成为保障网络安全的基本要求。而实现 HTTPS 的基础是 SSL/TLS 证书的申请、安装和续签。然而,手动管理证书不仅繁琐,还容易出错。为了解决这一问题,acme.sh 提供了一种轻量级、自动化的解决方案。

acme.sh 是一个纯 Shell 脚本的 ACME 客户端,旨在简化证书的申请和管理过程,支持多种 DNS 服务商和 Web 服务,轻松实现自动化。


什么是 acme.sh

acme.sh 是一个开源的 ACME 客户端,用于申请和管理免费的 SSL/TLS 证书,如 Let’s EncryptZeroSSL。它完全基于 Shell 编写,轻量且无依赖,支持多种环境和自动化流程。


核心特性

1. 支持多种 ACME 服务

acme.sh 支持 Let’s Encrypt、ZeroSSL 等多个 ACME 服务,开发者可以根据需求灵活选择。

2. 多种验证方式

支持 HTTP-01、DNS-01 和 TLS-ALPN-01 等验证方式,轻松适配各种环境。

3. 自动化管理

通过定时任务(cron)实现证书自动续签,减少手动操作。

4. 轻量级、无依赖

完全基于 Shell 编写,无需安装其他依赖,运行环境非常轻量。

5. 广泛的 DNS API 支持

支持数十种 DNS 服务商的 API(如 Cloudflare、Aliyun、AWS Route 53),方便开发者使用 DNS-01 验证。

6. 强大的扩展性

支持自定义证书安装脚本,可以将证书自动部署到 Web 服务器或负载均衡器。


应用场景

1. 小型网站

通过 acme.sh 申请免费的 SSL/TLS 证书,为小型网站提供 HTTPS 支持。

2. 自动化证书管理

利用 acme.sh 的自动续签功能,确保证书始终有效,无需人工干预。

3. 企业级应用

支持多域名和通配符证书,适合复杂的企业级应用场景。


快速上手指南

以下是使用 acme.sh 申请和管理证书的基本步骤:

1. 安装 acme.sh

安装 acme.sh 非常简单,可以通过以下命令完成:

1
curl https://get.acme.sh | sh

安装完成后,确保将 ~/.acme.sh/ 目录加入到环境变量中:

1
export PATH="~/.acme.sh:$PATH"

2. 申请证书

使用 HTTP-01 验证

如果你的网站可以通过 HTTP 访问,可以使用 HTTP-01 验证:

1
acme.sh --issue -d example.com -w /var/www/html

上述命令会在 /var/www/html 目录中创建验证文件,ACME 服务会通过 HTTP 请求验证它。

使用 DNS-01 验证

如果你的域名支持 DNS API,可以使用 DNS-01 验证:

1
acme.sh --issue -d example.com --dns dns_cf

需要先配置 Cloudflare 的 API Key(或其他 DNS 服务商的 API Key)。

通配符证书

使用 DNS-01 验证申请通配符证书:

1
acme.sh --issue -d example.com -d '*.example.com' --dns dns_cf

3. 安装证书

申请完成后,可以使用以下命令安装证书:

1
2
3
4
acme.sh --install-cert -d example.com \
--key-file /path/to/key.pem \
--fullchain-file /path/to/fullchain.pem \
--reloadcmd "systemctl reload nginx"

--reloadcmd 用于配置证书安装后自动重新加载 Web 服务器。


4. 自动续签

acme.sh 会自动为证书设置 cron 定时任务,确保证书始终有效。你可以通过以下命令手动检查续签任务:

1
acme.sh --renew --force -d example.com

高级功能

1. 多域名支持

acme.sh 支持一次申请多个域名:

1
acme.sh --issue -d example.com -d www.example.com -d api.example.com -w /var/www/html

2. Docker 集成

acme.sh 可在 Docker 容器中运行,适用于容器化部署:

1
2
3
4
docker run --rm -it \
-v /path/to/data:/acme.sh \
--entrypoint "/acme.sh/acme.sh" \
neilpang/acme.sh --issue -d example.com -w /var/www/html

3. 自定义 Hook 脚本

通过 --reloadcmd--pre-hook--post-hook 在证书安装或续签时执行自定义脚本。例如:

1
2
acme.sh --install-cert -d example.com \
--reloadcmd "/path/to/reload.sh"

与其他工具的对比

特性 acme.sh Certbot Caddy
语言 Shell Python Go
依赖 无依赖 依赖 Python 内置自动化工具
验证方式 HTTP/DNS/TLS HTTP/DNS/TLS HTTP/DNS
DNS API 支持 支持数十种 DNS 服务商 支持部分 DNS 服务商 支持部分 DNS 服务商
通配符证书 支持 支持 支持
轻量性

acme.sh 以轻量化和广泛的 DNS API 支持著称,适合需要灵活配置的开发者。


实际案例

1. 静态网站

通过 acme.sh 为静态网站申请和安装证书,确保 HTTPS 支持。

2. 企业内网

使用 acme.sh 为内部服务申请自签名证书,并自动部署到负载均衡器。

3. 云平台集成

acme.sh 集成到 CI/CD 流水线中,实现证书的自动化管理。


总结

acme.sh 是一个功能强大、轻量级的自动化证书管理工具,适用于各种环境和场景。无论是个人开发者还是企业团队,都可以通过 acme.sh 简化证书管理流程。

项目地址:https://github.com/acmesh-official/acme.sh

如果你正在寻找一个高效的证书管理工具,不妨试试 acme.sh!欢迎为项目点亮 ⭐️!


希望这篇文章能帮助你快速了解并上手 acme.sh,如果有任何疑问或建议,欢迎留言交流!