acme.sh搞定泛域名证书
对于需要管理多个子域名的开发者或运维人员来说,泛域名证书(Wildcard Certificate)结合自动化工具,是提升效率、确保安全的最佳实践。它能用一个证书覆盖主域名下的所有子域名,比如*,examp1e.com可以用于 api.example.comb1og.example.comadmin,exarple.com等等。而 acme.sh,作为一款纯Shel脚本编写的ACME协议客户端,以其轻量、无依赖、自动化程度高的特点,成为了管理Let's Encrypt只证书的热门选择。
第 0 步:前提条件
必须满足:
-
你拥有 example.com 域名
-
域名在支持 API 的平台(阿里云 / 腾讯云 / Cloudflare 等)
-
服务器能联网
-
nginx 已安装
第 1 步:DNS 基础解析配置
在域名控制台添加:
example.com A 服务器公网IP
*.example.com A 服务器公网IP (可选,但推荐)
第 2 步:安装 acme.sh(只做一次)
curl https://get.acme.sh | sh
source ~/.bashrc
第 3 步:配置 DNS API(关键步骤)
不同平台不同方法。
举例:阿里云
① 获取 AccessKey
阿里云 → RAM → 创建子账号 → 开通 DNS 管理权限
得到:
AccessKeySecret
② 设置环境变量
export Ali_Secret="你的AccessKeySecret"
(可以写进 ~/.bashrc)
第 4 步:申请通配符证书(ECC 推荐)
-d example.com \
-d '*.example.com' \
--dns dns_ali \
--keylength ec-256
解释:
-
--dns dns_ali= 使用阿里云 DNS API -
--keylength ec-256= ECC 证书 -
*.example.com= 通配符
成功后证书在:
--key-file /srv/nginx/ssl/example.com.key \
--fullchain-file /srv/nginx/ssl/example.com.crt \
--reloadcmd "systemctl reload nginx"
listen 443 ssl;
server_name example.com *.example.com;
ssl_certificate /srv/nginx/ssl/example.com.crt;
ssl_certificate_key /srv/nginx/ssl/example.com.key;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
acme.sh 默认有 cron 定时任务:
会看到类似:
证书快到期时会自动:
-
续期
-
执行 reloadcmd
-
重载 nginx
你基本不用管。
🚀 优势(相比你现在那种多 SAN 方式)
| 方式 | 优点 | 缺点 |
|---|---|---|
| 多域名 SAN | 直观 | 每加一个域名要重新申请 |
| 通配符 | 一次搞定所有子域名 | 必须 DNS API |

浙公网安备 33010602011771号