acme.sh 是纯 shell 写的 ACME 客户端,配合 Cloudflare DNS API 可以做到全自动申请和续签,包括泛域名证书。
安装
curl https://get.acme.sh | sh -s email=you@example.com
source ~/.bashrc
acme.sh --version
获取 Cloudflare API Token
- 登录 Cloudflare → My Profile → API Tokens → Create Token
- 模板选 “Edit zone DNS”,权限设为
Zone:DNS:Edit,限定到你的域名 - 拿到
CF_Token和CF_Zone_ID(域名 Overview 页面右侧有 Zone ID)
设置环境变量
export CF_Token="你的token"
export CF_Zone_ID="你的zone_id"
申请证书
签发单个域名:
acme.sh --issue --dns dns_cf -d blog.example.com
签发泛域名(自动包含根域):
acme.sh --issue --dns dns_cf -d '*.example.com' -d example.com
泛域名只能通过 DNS 方式验证,不能用 HTTP 方式。
安装证书到目标目录
acme.sh --install-cert -d '*.example.com' \
--key-file /etc/ssl/example.com/privkey.pem \
--fullchain-file /etc/ssl/example.com/fullchain.pem \
--reloadcmd "systemctl reload nginx"
验证自动续签
acme.sh --cron --home "$HOME/.acme.sh"
acme.sh --list
acme.sh 已内置 crontab 任务,每天检查,到期前 30 天自动续签。
查看/更新
acme.sh --info -d '*.example.com' # 查看证书信息
acme.sh --upgrade # 升级自身
acme.sh --update-account # 更新注册邮箱
注意事项
--reloadcmd在每次续签成功后执行,用来重载 Web 服务- 目录
/etc/ssl/example.com/需提前创建并授权 - 多域名证书申请要在同一条命令里完成