acme.sh 免费 SSL 证书

acme.sh 配置留档

Posted on 2026-01-31 00:30:00 in Nginx   阅读(13) Last updated on 2026-01-31 00:33:19

使用 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.top
  • DNS:*.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/