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 管理权限

得到:

 
 
 
AccessKeyId
AccessKeySecret
 

② 设置环境变量

 
 
 
export Ali_Key="你的AccessKeyId"
export Ali_Secret="你的AccessKeySecret"
 

(可以写进 ~/.bashrc)

第 4 步:申请通配符证书(ECC 推荐)

acme.sh --issue \
-d example.com \
-d '*.example.com' \
--dns dns_ali \
--keylength ec-256
 

解释:

  • --dns dns_ali = 使用阿里云 DNS API

  • --keylength ec-256 = ECC 证书

  • *.example.com = 通配符

成功后证书在:

 
 
 
/root/.acme.sh/example.com_ecc/
第 5 步:安装证书到 nginx 目录
acme.sh --install-cert -d example.com --ecc \
--key-file /srv/nginx/ssl/example.com.key \
--fullchain-file /srv/nginx/ssl/example.com.crt \
--reloadcmd "systemctl reload nginx"
 
第 6 步:nginx 配置
server {
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;
}
}
第 7 步:自动续期(通常自动)

acme.sh 默认有 cron 定时任务:

 
 
 
crontab -l
 

会看到类似:

 
 
 
0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh"
 

证书快到期时会自动:

  • 续期

  • 执行 reloadcmd

  • 重载 nginx

你基本不用管。

 

🚀 优势(相比你现在那种多 SAN 方式)

方式优点缺点
多域名 SAN 直观 每加一个域名要重新申请
通配符 一次搞定所有子域名 必须 DNS API
posted @ 2026-02-26 11:40  星期三q  阅读(83)  评论(0)    收藏  举报