用acme.sh自动签发由阿里云托管域名的泛域名证书
步骤 1:安装 acme.sh(官方一键脚本)
# 安装
curl https://get.acme.sh | sh -s email=你的邮箱@example.com
# 让当前 shell 立即识别命令
source ~/.bashrc安装完成后,acme.sh 位于 ~/.acme.sh/,并已自动创建 cron 任务。
步骤 2:配置阿里云 DNS API 密钥(RAM 子用户)
1、登录阿里云控制台 → RAM → 用户 → 创建用户 → 勾选编程访问
2、权限策略:AliyunDNSFullAccess
3、拿到 AccessKey ID 和 AccessKey Secret
# 写入全局环境变量(重启也生效)
echo 'export Ali_Key="LTAIxxxxxxxxxx"' >> /etc/profile
echo 'export Ali_Secret="xxxxxxxxxxxxxxxxxxxxxxxxxxxx"' >> /etc/profile
source /etc/profile步骤 3:签发泛域名证书(DNS 验证)
acme.sh --issue --dns dns_ali -d example.com -d '*.example.com'多域名时使用
acme.sh --issue --dns dns_ali \
-d example.com \
-d '*.example.com' \
-d '*.child.example.com'要点
1、每个 -d 只带一个域名
2、通配符必须用单引号包住,防止 shell 展开
3、可以混用普通域名 + 多个通配符,一张证书全覆盖
4、签发后所有域名会写进 SAN 字段,Nginx 里随便哪个 server_name 只要匹配其中一项就合法
成功后会看到:
Cert success.
证书已保存在 ~/.acme.sh/example.com/步骤 4:安装证书到 Nginx(统一路径)
# 创建目录
mkdir -p /etc/nginx/ssl
# 安装并指定 reload 命令
acme.sh --install-cert -d example.com \
--key-file /etc/nginx/ssl/example.com.key \
--fullchain-file /etc/nginx/ssl/fullchain.cer \
--reloadcmd "nginx -s reload"续期成功后自动复制新证书并重载 Nginx。
若/etc/nginx/ssl/目录下无.key文件,则重新运行命令。
步骤 5:设置提前 3 天续期(全局生效)
# 立即生效并写入配置
acme.sh --set-default-ca --server letsencrypt
acme.sh --cron --home ~/.acme.sh --days 3步骤 6:验证自动续期逻辑
# 手动模拟 cron 运行
acme.sh --cron --home ~/.acme.sh --days 3如果证书剩余天数 > 3,提示 Skip;
如果 ≤ 3,会立即续期并重启 Nginx。
步骤 7:查看证书信息 & 剩余天数
# 列表
acme.sh --list
# 详细
acme.sh --info -d example.com步骤 8:确认 cron 任务存在(默认已创建)
crontab -l 