acme.sh是linux下自动化管理ssl证书的轻量工具。先用curl安装并加载环境,再依dns api或web根目录方式申请证书,接着安装至nginx,最后配置自动续期定时任务。

如果您希望在Linux服务器上自动化申请和管理SSL证书,acme.sh 是一个轻量级、功能强大的开源工具,支持 ACME 协议,可直接与 Let's Encrypt 等 CA 交互。以下是完成安装与证书申请的完整操作流程:
一、通过 curl 安装 acme.sh
acme.sh 提供一键安装脚本,无需依赖额外包管理器,安装过程会自动创建目录、配置环境变量并设置默认 CA 为 Let's Encrypt。
1、执行安装命令:curl https://get.acme.sh | sh
2、重新加载 shell 配置以使 acme.sh 命令生效:source ~/.acme.sh/acme.sh.env
3、验证安装是否成功:acme.sh --version
二、使用 DNS API 方式申请泛域名证书
DNS API 方式可自动完成 TXT 记录添加与验证,适用于需要泛域名(如 *.example.com)或无法开放 HTTP 端口的场景,要求提前配置对应 DNS 服务商的 API 凭据。
1、导出 DNS API 密钥(以阿里云为例):export Ali_Key="your_access_key"
2、导出 DNS API 密钥 Secret:export Ali_Secret="your_access_secret"
3、执行泛域名证书申请:acme.sh --issue --dns dns_ali -d example.com -d *.example.com
三、使用 Web 根目录方式申请证书
该方式通过在网站根目录下放置验证文件完成 HTTP-01 挑战,适用于已运行 Web 服务且可公开访问指定端口(80)的环境,无需 DNS 权限。
1、确保 Web 服务正在运行并可被公网访问,网站根路径为 /var/www/html
2、执行证书申请命令:acme.sh --issue -d example.com -w /var/www/html
3、验证文件将自动生成于指定目录,acme.sh 会自动调用 Web 服务器访问 http://example.com/.well-known/acme-challenge/xxx 完成校验
四、安装证书到 Nginx 配置目录
申请成功后,证书文件默认存于 ~/.acme.sh/example.com/ 目录下,需将其复制或软链接至 Nginx 可读路径,并更新 server 块配置。
1、执行安装命令(自动复制并设置权限):acme.sh --install-cert -d example.com --key-file /etc/nginx/ssl/example.com.key --fullchain-file /etc/nginx/ssl/example.com.crt
2、确认目标目录存在且 Nginx 用户具有读取权限:ls -l /etc/nginx/ssl/example.com.*
3、在 Nginx 的 server 配置中引用证书:ssl_certificate /etc/nginx/ssl/example.com.crt; 与 ssl_certificate_key /etc/nginx/ssl/example.com.key;
五、配置自动续期与系统级定时任务
acme.sh 默认每 60 天检查一次证书有效期并自动续期,但需确保其能以正确用户身份运行,且定时任务已启用。
1、查看当前用户的 crontab 是否已添加 acme.sh 自动任务:crontab -l | grep acme.sh
2、若未添加,手动追加每日凌晨执行检查:0 0 * * * "/root/.acme.sh/acme.sh" --cron --home "/root/.acme.sh" > /dev/null
3、测试续期逻辑是否正常:acme.sh --renew -d example.com --force --dry-run










