使用 acme.sh 申请单域名与泛域名 SSL 证书

🌙
⬆️

使用 acme.sh 申请单域名与泛域名 SSL 证书

适用场景:
• 仅为 example.com 申请单域名证书
• 为 example.com 及其全部子域名 *.example.com 申请一张泛域名证书
• 自动续期、自动部署到 Nginx/Docker 等
工具:acme.sh(纯 Shell,ZeroSSL / Let’s Encrypt 双 CA 支持)

1. 安装 acme.sh

# 任意 Linux 发行版通用
curl https://get.acme.sh | sh -s email=你的邮箱@example.com
source ~/.bashrc          # 重新加载 PATH
acme.sh --version         # 验证安装

安装完成后:
• 脚本位于 ~/.acme.sh/
• 自动创建每日 0 点的续期 cron:crontab -l 可见


2. 选择 CA(Let’s Encrypt 或 ZeroSSL)

# 默认 CA 为 ZeroSSL;若想用 Let’s Encrypt
acme.sh --set-default-ca --server letsencrypt

3. 申请方式总览

场景推荐方式是否需要 80 端口备注
服务器已运行 Web 服务HTTP-01(webroot)简单快捷
无 Web 服务或 80 被占用HTTP-01(standalone)临时占用 80
泛域名 / 多域名DNS-01(API)一次签发 *.example.com

4. 单域名证书示例

4.1 服务器已有 Web(Nginx/Apache)

# 以 Nginx 根目录 /var/www/html 为例
acme.sh --issue \
  -d example.com \
  -w /var/www/html

acme.sh 会自动在 /var/www/html/.well-known/acme-challenge/ 放置验证文件。

4.2 无 Web 服务

# 需 80 端口空闲,自动起临时 web
acme.sh --issue \
  -d example.com \
  --standalone

5. 泛域名证书示例(DNS-API 方式)

5.1 准备 DNS API 密钥(以腾讯云为例)

在域名商控制台获取:
SecretId
SecretKey

export Tencent_SecretId="AKIDxxxxxxxx"
export Tencent_SecretKey="xxxxxxxxxxxxxxxx"

5.2 一键申请

acme.sh --issue \
  --dns dns_tencent \
  -d example.com \
  -d '*.example.com'

注意:
• 必须同时写 -d example.com -d '*.example.com'
• 泛域名仅支持 DNS-01 验证


6. 安装(部署)证书到 Nginx

acme.sh 不会直接修改服务器配置,而是把证书复制到你指定的目录,并帮你 reload 服务。

# 创建统一存放目录
sudo mkdir -p /etc/ssl/acme

# 安装证书
acme.sh --install-cert -d example.com \
  --key-file       /etc/ssl/acme/example.com.key \
  --fullchain-file /etc/ssl/acme/fullchain.cer \
  --reloadcmd      "nginx -t && systemctl reload nginx"

Nginx 配置片段:

server {
    listen 443 ssl http2;
    server_name example.com *.example.com;

    ssl_certificate     /etc/ssl/acme/fullchain.cer;
    ssl_certificate_key /etc/ssl/acme/example.com.key;
    ssl_protocols       TLSv1.2 TLSv1.3;
}

测试并重载:

sudo nginx -t && sudo systemctl reload nginx

7. 自动续期

无需额外配置,acme.sh 已写入 cron。如需手动测试:

acme.sh --renew -d example.com --force

8. 常用命令速查

目的命令
查看已有证书acme.sh --list
强制续期acme.sh --renew -d example.com --force
删除证书acme.sh --remove -d example.com
升级 acme.shacme.sh --upgrade

9. 故障排查

现象原因解决
Standalone mode :: 80 port is used80 被占用改用 webroot 或临时关闭占用进程
DNS API 报错 Invalid SecretId变量名/权限错误重新核对 DNS 商 API 密钥
泛域名证书浏览器无效只写了 *.example.com 没写根域重新申请时同时带 -d example.com

10. 参考

防火墙入门:UFW、Firewalld 与 iptables 场景速查
域名购买与 DNS 解析入门教程

✍️ 添加新评论

💨 由 PIGYun全球优质服务器 提供快速评论体验
🚀 评论由PIGYun高性能服务器处理