Skip to Content
其它acme.sh 证书申请指南

acme.sh 域名证书申请指南

acme.sh  是一个纯 Shell 编写的 ACME 协议客户端,用于自动化申请和续期免费 SSL 证书(Let’s Encrypt、ZeroSSL 等)。本文整理常用操作指南,帮助快速上手。


一、证书限制说明

限制主要来自对接的 CA 机构(Let’s Encrypt/ZeroSSL 等),脚本本身无额外限制:

限制类型说明
有效期免费证书默认 90 天,acme.sh 会自动在 30 天时续期;2026 年起 CA/B 论坛要求最长有效期缩短至 47 天
泛域名范围*.example.com 仅对二级域名生效,多级泛域名(如 *.api.example.com)需单独申请
ZeroSSL 通道ZeroSSL 官网免费用户限 3 个证书,通过 acme.sh 走 ACME 协议无此数量限制
密钥类型Let’s Encrypt 暂不支持 ECDSA P-521(ec-521),仅支持 ec-256/ec-384 和 RSA 系列
CA 通用限制免费证书均为 DV 级,无 OV/EV 级;不支持纯 IP 地址申请,仅支持合法解析的域名

二、申请时的关键要求

1. 域名所有权验证

验证模式要求适用场景
Webroot/Standalone/Apache/Nginx域名公网可访问,80/443 端口未被占用(部分模式需 root 权限)公网服务器
DNS API 模式域名商支持 API 并配置密钥,可全自动验证推荐,内网/封闭端口
DNS 手动模式手动添加 TXT 解析,无法自动续期临时申请

2. 权限/环境要求

  • 无需 root 但建议使用,Webroot 模式需对网站根目录有写入权限
  • 依赖 curl、openssl 等基础工具,Windows 需搭配 Cygwin 环境

3. 证书使用规范

  • 生成的证书默认存于 ~/.acme.sh/不可直接使用,需通过 --install-cert 命令复制到服务目录
  • 安装时必须配置 --reloadcmd,否则证书续期后服务不会加载新证书

4. 其他要求

  • 多域名证书需所有域名绑定同一 webroot 目录
  • 申请时需填写有效邮箱,用于证书过期/异常通知

三、常用申请命令

1. Nginx 模式(最常用)

适合 Nginx 正在运行且 80/443 端口正常的场景:

acme.sh --issue -d 你的域名.com -d www.你的域名.com --nginx

特点

  • ✅ 80、443 端口必须正常开着、被 Nginx 占用
  • ✅ acme.sh 会自动改配置、验证、改回去,不用停服务

2. Webroot 模式

适合网站正在运行且有写入权限的场景:

acme.sh --issue -d 你的域名.com --webroot /var/www/html

特点

  • ✅ 80 端口必须被占用(正常运行)
  • ✅ 需要对网站根目录有写入权限

3. DNS API 模式(推荐)

适合内网服务器、封闭端口或追求全自动的场景,完全不需要 80/443 端口

# 以阿里云为例 export Ali_Key="你的 AccessKey ID" export Ali_Secret="你的 AccessKey Secret" acme.sh --issue --dns dns_ali -d gt.tech -d *.gt.tech

特点

  • 完全不需要 80/443 端口
  • ✅ 内网服务器、封闭端口、本地机器都能申请
  • 支持自动续期

4. DNS 手动模式

适合临时申请,不想配置 API 的场景:

acme.sh --issue -d example.com -d "*.example.com" --dns manual

执行后会输出 TXT 记录值,需到域名后台添加:

_acme-challenge.example.com. IN TXT "xxxxxxxxxxxx"

添加后等待 1-5 分钟,执行续期命令完成签发:

acme.sh --renew -d "你的域名.com" --yes-I-know-dns-manual-mode-enough-go-ahead-please

特点

  • ✅ 支持所有域名商,不需要 API
  • ✅ 完全不用 80/443 端口
  • 不能自动续期,每 60 天要手动再跑一次

四、泛域名证书申请

前提条件

  • 有一个域名(如 abc.com
  • 能进域名控制台添加 TXT 记录
  • 已经装好 acme.sh

完整步骤(以阿里云 DNS API 为例)

1. 获取阿里云 API 密钥

  1. 登录阿里云 → 右上角头像 → AccessKey 管理
  2. 创建子用户(推荐,更安全)
  3. 权限添加:AliyunDNSFullAccess
  4. 记下 AccessKey IDAccessKey Secret

2. 配置密钥到服务器

export Ali_Key="你的阿里云 AccessKey ID" export Ali_Secret="你的阿里云 AccessKey Secret"

3. 申请泛域名证书

acme.sh --issue \ --dns dns_ali \ -d gt.tech \ -d *.gt.tech

说明

  • 同时申请 gt.tech(主域名)和 *.gt.tech(泛域名)
  • 全自动 DNS 验证,不用手动加解析
  • 不需要 80/443 端口
  • 以后自动续期

4. 安装证书到 Nginx(必须执行)

acme.sh --install-cert -d gt.tech \ --key-file /etc/nginx/ssl/gt.tech.key \ --fullchain-file /etc/nginx/ssl/fullchain.cer \ --reloadcmd "systemctl reload nginx"

五、Nginx 配置

1. 所有子域名共用同一站点

适合所有子域名都指向同一个前端/后端服务的场景:

# HTTP 自动跳转 HTTPS server { listen 80; server_name gt.tech *.gt.tech; return 301 https://$host$request_uri; } # HTTPS 配置 server { listen 443 ssl; server_name gt.tech *.gt.tech; ssl_certificate /etc/nginx/ssl/fullchain.cer; ssl_certificate_key /etc/nginx/ssl/gt.tech.key; # SSL 安全配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # 业务配置 root /var/www/html; index index.html index.htm; }

效果

  • 访问 https://gt.tech(无前缀主域名)正常打开
  • 访问 https://www.gt.techhttps://api.gt.techhttps://xxx.gt.tech 全部正常匹配
  • 证书对所有子域名都有效
  • 以后加新子域名,只需在域名商解析到服务器 IP,不用改 Nginx 配置

2. 不同子域名对应不同服务

适合 www 做官网、api 做后端、test 做测试环境的场景:

# 全局 HTTP 跳转 HTTPS server { listen 80; server_name gt.tech *.gt.tech; return 301 https://$host$request_uri; } # 主域名+www:官网 server { listen 443 ssl; server_name gt.tech www.gt.tech; ssl_certificate /etc/nginx/ssl/fullchain.cer; ssl_certificate_key /etc/nginx/ssl/gt.tech.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; root /var/www/official-website; index index.html; } # api 子域名:后端接口 server { listen 443 ssl; server_name api.gt.tech; ssl_certificate /etc/nginx/ssl/fullchain.cer; ssl_certificate_key /etc/nginx/ssl/gt.tech.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } # test 子域名:测试环境 server { listen 443 ssl; server_name test.gt.tech; ssl_certificate /etc/nginx/ssl/fullchain.cer; ssl_certificate_key /etc/nginx/ssl/gt.tech.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; root /var/www/test-env; index index.html; }

六、验证步骤

1. 测试配置语法

nginx -t

显示 test is successful 说明配置无错误。

2. 重载 Nginx

systemctl reload nginx

3. 验证证书是否匹配

openssl s_client -connect test.gt.tech:443 -servername test.gt.tech 2>/dev/null | openssl x509 -noout -text | grep DNS

正常会输出 DNS:gt.tech, DNS:*.gt.tech,说明证书对所有子域名有效。


七、常见问题

换域名/新增域名

直接重新申请即可:

acme.sh --issue -d 新域名.com -d www.新域名.com --nginx

端口占用问题总结

模式80/443 端口要求
--nginx / --apache✅ 必须正常开着、被占用
--webroot✅ 必须被占用(正常运行)
--standalone❌ 必须是空的、没被占用
--dns完全不需要

泛域名证书覆盖范围

申请 *.gt.tech 后:

  • ✅ 支持:www.gt.techapi.gt.techabc.gt.tech(所有二级域名)
  • ✅ 支持:gt.tech(主域名,需同时申请 -d gt.tech
  • ❌ 不支持:demo.www.gt.techa.b.gt.tech(三级及以上域名)

证书共用

一张证书同时包含主域名和泛域名时:

acme.sh --issue --dns dns_ali -d gt.tech -d *.gt.tech

这张证书同时支持

  • gt.tech(无前缀主域名)
  • www.gt.techapi.gt.tech 等所有二级域名

一套证书,全部通用,无需分开申请。


八、acme.sh 的核心价值

acme.sh 是免费 SSL 证书自动化的事实标准工具,功能无夸大,所有特性均为实际运维所需:

优势说明
轻量无依赖纯 Shell 脚本,无 Python/PHP 依赖,跨所有主流 OS/服务器
自动化核心全程无需人工干预,自动申请、续期、重载服务
生态兼容性支持所有 RFC8555 合规 CA、数十家 DNS 商 API、所有主流服务
无商业化捆绑开源 GPLv3 协议,由 ZeroSSL 官方维护,无广告/收费插件

简单说,acme.sh 解决了免费证书频繁续期的痛点,是运维标配工具。

Last updated on