SSL证书acme.sh脚本教程
在构建高安全性网站的过程中,SSL证书是保障数据传输加密、提升搜索引擎排名的核心组件,传统证书申请流程繁琐且续费成本高,许多站长仍停留在手动购买或配置不自动化的阶段,本文将深入解析如何利用 acme.sh 这一轻量级、纯 Shell 语言编写的 ACME 协议客户端,实现 Let’s Encrypt 等免费证书的自动化申请、部署与续期,本教程基于生产环境实测,旨在为服务器管理员提供一套高可用、低维护成本的安全解决方案。
为什么选择 acme.sh?
相较于 Certbot 等基于 Python 的工具,acme.sh 具有以下显著优势,使其成为 Linux 服务器环境下的首选方案:
- 零依赖环境:完全由 Shell 脚本编写,无需安装 Python、Perl 等复杂依赖库,极大降低了环境冲突风险。
- 自动续期机制:内置 Cron 任务支持,默认每 60 天自动检测并续期证书,确保证书永不过期。
- 多 DNS 提供商支持:原生支持 Cloudflare、AliDNS、Tencent Cloud 等主流 DNS 服务商的 API 集成,完美解决通配符证书(
.example.com)的申请难题。 - 兼容性极强:支持 Nginx、Apache、Lighttpd、Tengine 等主流 Web 服务器,并能自动重载配置。
准备工作:服务器环境要求
在开始之前,请确保您的服务器满足以下基本条件:
- 操作系统:CentOS 7+、Ubuntu 18.04+、Debian 9+ 或 Alpine Linux。
- Shell 环境:推荐使用 Bash 或 Zsh。
- 网络权限:服务器需能访问互联网,且防火墙开放 TCP 80 和 443 端口(若使用 HTTP-01 验证);若使用 DNS-01 验证,则无需开放 80 端口,但需配置对应 DNS 服务商的 API 密钥。
- 域名解析:域名已正确解析至服务器 IP 地址。
安装 acme.sh
安装过程极其简单,只需一条命令即可完成全局安装,并将脚本添加到系统路径中。
curl https://get.acme.sh | sh -s email=your_email@example.com
注意:安装完成后,请重新加载 Shell 配置或重新登录终端,使
acme.sh命令生效。
安装成功后,acme.sh 会将证书存储在主目录下的 ~/.acme.sh/ 目录中,并自动创建 Cron 任务,您可以通过以下命令验证安装状态:
acme.sh --version
核心场景一:HTTP-01 验证(适用于单域名)
HTTP-01 验证是最基础的验证方式,要求服务器在 .well-known/acme-challenge/ 目录下放置验证文件,此方式适合已运行 Web 服务且开放 80 端口的场景。
步骤 1:申请证书
假设您的域名为 www.example.com,Web 服务器根目录为 /var/www/html。
acme.sh --issue -d www.example.com -w /var/www/html
-d:指定域名。-w:指定 Web 根目录,用于存放验证文件。
步骤 2:部署证书
证书申请成功后,需将其复制到 Nginx 或 Apache 的配置目录,并配置服务器重载。
Nginx 部署示例:
acme.sh --install-cert -d www.example.com --key-file /etc/nginx/ssl/www.example.com.key --fullchain-file /etc/nginx/ssl/www.example.com.crt --reloadcmd "systemctl reload nginx"
--key-file:私钥路径。--fullchain-file:证书链路径。--reloadcmd:证书更新后自动执行的命令,确保证书无缝切换。
核心场景二:DNS-01 验证(适用于通配符证书)
若您需要申请 .example.com 通配符证书,或服务器未开放 80 端口,必须使用 DNS-01 验证,此方式通过在域名 DNS 记录中添加特定的 TXT 记录来证明域名所有权。
以 Cloudflare 为例
- 获取 API Token:登录 Cloudflare Dashboard,进入 “My Profile” -> “API Tokens”,创建一个具有 “Edit DNS” 权限的 Token。
- 设置环境变量:
export CF_Token="your_cloudflare_api_token"
- 申请通配符证书:
acme.sh --issue --dns dns_cf -d example.com -d '.example.com'
- 部署证书:
acme.sh --install-cert -d example.com --key-file /etc/nginx/ssl/example.com.key --fullchain-file /etc/nginx/ssl/example.com.crt --reloadcmd "systemctl reload nginx"
优势提示:DNS-01 验证不仅支持通配符,还避免了因 Web 服务器配置错误导致的验证失败问题,是生产环境推荐的最佳实践。
自动化续期与维护
acme.sh 默认每 60 天自动检查证书有效期,若证书剩余有效期不足 30 天,脚本将自动执行续期并触发重载命令。
查看当前证书状态
acme.sh --list
手动强制续期(测试用)
acme.sh --renew -d www.example.com --force
清理过期证书
定期清理不再使用的证书,保持系统整洁:
acme.sh --remove -d www.example.com
常见问题与故障排查
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| Validation failed | 80 端口未开放或 Web 根目录配置错误 | 检查防火墙设置,确保 -w 参数指向正确的目录,且文件可公开访问。 |
| DNS record not found | DNS 传播延迟或 API 配置错误 | 等待 5-10 分钟让 DNS 生效,或检查 export CF_Token 是否正确设置。 |
| 证书未自动重载 | --reloadcmd 命令执行失败 |
手动执行 --reloadcmd 中的命令,检查权限及服务状态。 |
| Rate Limit Exceeded | 请求频率超限 | 等待 1 小时后再试,或联系 Let’s Encrypt 支持,避免频繁测试。 |
2026年服务器安全优化建议
随着网络安全威胁的不断演进,仅依靠免费 SSL 证书已不足以应对高级攻击,在 2026年,建议站长采取以下进阶措施:
- 启用 HSTS(HTTP Strict Transport Security):强制浏览器通过 HTTPS 连接,防止中间人攻击。
- 使用 ECC 证书:相比 RSA 证书,ECC 证书在相同安全强度下密钥更短,性能更高,适合移动端优化。
acme.sh支持通过--keylength EC-256参数申请 ECC 证书。 - 定期轮换证书:虽然
acme.sh自动续期,但建议每季度手动检查一次证书链完整性,确保无中间证书缺失问题。 - 监控证书过期时间:集成 Prometheus + Grafana 或 Zabbix,对证书有效期进行实时监控,设置提前 7 天的告警阈值。
acme.sh 以其简洁、高效、自动化的特性,彻底解决了 SSL 证书管理中的痛点,通过本文的教程,您可以轻松实现从证书申请、部署到自动续期的全流程自动化,在 2026年 的网络环境中,构建一个自动化的证书管理体系,不仅是提升网站安全性的必要手段,更是降低运维成本、提高系统稳定性的关键策略。
立即行动,为您的网站部署 acme.sh,享受安全、便捷、无忧的 HTTPS 体验。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/482309.html



