使用 acme.sh 在阿里云 DNS 上签发 Let’s Encrypt 通配符证书(*.chenyanjin.top)并配置 Nginx 自动续期
本文记录一套可复用的标准流程:使用 acme.sh + 阿里云 DNS(dns_ali) 通过 DNS-01 验证签发 Let’s Encrypt 的通配符证书,并安装到 Nginx,确保后续自动续期和自动 reload。
适用场景:需要
*.chenyanjin.top这类通配符证书(必须使用 DNS-01 验证)。
0. 前置条件
- 域名解析托管在 阿里云云解析 DNS
- 服务器已安装并运行 Nginx
- 服务器可访问 Let’s Encrypt ACME 目录:
https://acme-v02.api.letsencrypt.org/directory - 已在阿里云 RAM 创建 AccessKey(需要 DNS 修改权限)
1. 安装 / 升级 acme.sh
安装:
curl https://get.acme.sh | sh
source ~/.bashrc
升级(建议执行):
acme.sh --upgrade
2. 配置 Let’s Encrypt 为默认 CA
acme.sh --set-default-ca --server letsencrypt
3. 配置阿里云 DNS API(dns_ali)
在服务器上导出环境变量(替换为你自己的值):
export Ali_Key="你的AccessKeyId"
export Ali_Secret="你的AccessKeySecret"
说明:acme.sh 会把这两个值写入
~/.acme.sh/account.conf用于后续续期。
4. 签发证书(ECC / ec-256,包含根域 + 通配符)
建议同时签发根域和通配符:
acme.sh --issue --dns dns_ali \
-d chenyanjin.top -d '*.chenyanjin.top' \
--server letsencrypt
如遇到 DNS 生效慢,可加等待参数(可选):
acme.sh --issue --dns dns_ali \
-d chenyanjin.top -d '*.chenyanjin.top' \
--server letsencrypt \
--dnssleep 30
签发成功后,可用以下命令查看证书列表:
acme.sh --list
5. 安装证书到固定路径并设置 Nginx 自动 reload
不要在 Nginx 中直接引用 ~/.acme.sh/... 目录里的证书文件。推荐用 --install-cert 将证书复制到固定路径,并写入自动 reload 命令。
mkdir -p /etc/nginx/ssl/chenyanjin.top
acme.sh --install-cert -d chenyanjin.top --ecc \
--key-file /etc/nginx/ssl/chenyanjin.top/privkey.pem \
--fullchain-file /etc/nginx/ssl/chenyanjin.top/fullchain.pem \
--reloadcmd "nginx -s reload"
如果你的系统用 systemd,也可以替换 reload 命令为:
systemctl reload nginx
6. 配置 Nginx 使用证书
在对应的 server { listen 443 ssl; ... } 中设置证书路径:
ssl_certificate /etc/nginx/ssl/chenyanjin.top/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/chenyanjin.top/privkey.pem;
建议把根域和 www 一起写入(示例):
server {
listen 443 ssl;
server_name chenyanjin.top www.chenyanjin.top;
ssl_certificate /etc/nginx/ssl/chenyanjin.top/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/chenyanjin.top/privkey.pem;
# 其他配置...
}
检查并重载 Nginx:
nginx -t && nginx -s reload
7. 验证证书是否生效(本机 SNI 验证)
在服务器上执行(直连本机 443,排除 DNS 干扰):
echo | openssl s_client -connect 127.0.0.1:443 -servername www.chenyanjin.top 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates -text \
| grep -A1 -n "Subject Alternative Name"
应能看到 subjectAltName 包含:
DNS:chenyanjin.topDNS:*.chenyanjin.top
8. 自动续期(cron)
acme.sh 安装后通常会自动写入 cron。检查:
crontab -l | grep acme.sh
一般会看到类似:
"/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
9. 续期演练(建议)
为了确认 dns_ali 权限与 reloadcmd 都正常,建议强制续期演练一次:
acme.sh --renew -d chenyanjin.top --ecc --force
10. 常用命令汇总
查看证书列表:
acme.sh --list
强制续期(演练):
acme.sh --renew -d chenyanjin.top --ecc --force
重新安装证书(幂等,可重复执行):
acme.sh --install-cert -d chenyanjin.top --ecc \
--key-file /etc/nginx/ssl/chenyanjin.top/privkey.pem \
--fullchain-file /etc/nginx/ssl/chenyanjin.top/fullchain.pem \
--reloadcmd "nginx -s reload"
参考目录
- acme.sh 证书目录(自动生成):
/root/.acme.sh/chenyanjin.top_ecc/ - Nginx 证书固定目录(推荐):
/etc/nginx/ssl/chenyanjin.top/