Update avaliable. Click RELOAD to update.
📱 安装应用到主屏幕,获得更好体验
目录

Dify 中使用 acme.sh 申请 Let’s Encrypt 通配符 SSL 证书

acme.sh 是一个轻量级的 SSL 证书自动化管理工具,支持通过 DNS 验证方式申请通配符证书。本文记录如何使用 acme.sh 配合阿里云 DNS API 申请 Let’s Encrypt 通配符 SSL 证书,并安装到 Docker 部署的 Nginx 中。

1. 安装 acme.sh

执行以下命令安装 acme.sh

$ curl https://get.acme.sh | sh

安装完成后,使环境变量生效:

$ source ~/.bashrc

如果系统未安装 curl,需要先安装后再执行安装命令。

2. 切换默认 CA 为 Let’s Encrypt

acme.sh 默认 CA 可能是 ZeroSSL,ZeroSSL 通常需要注册邮箱。这里切换为 Let’s Encrypt:

$ ~/.acme.sh/acme.sh --set-default-ca --server letsencrypt

3. 设置阿里云 DNS 解析变量

由于申请通配符证书需要进行 DNS 验证,这里使用阿里云 DNS API 自动完成域名解析验证。

$ export Ali_Key="<aliyun-access-key-id>"
$ export Ali_Secret="<aliyun-access-key-secret>"

其中:

注意:AccessKey 需要具备 DNS 解析管理权限,建议使用最小权限原则,不要直接使用主账号密钥。

4. 签发通配符 SSL 证书

执行以下命令申请通配符证书:

$ ~/.acme.sh/acme.sh --issue --force \
  --server letsencrypt \
  --dns dns_ali \
  -d '*.<your-domain>'

示例中的域名已做脱敏处理,请将 *.<your-domain> 替换为自己的通配符域名,例如:

*.example.com

5. 创建证书目录

创建用于存放证书的目录:

$ mkdir -p /root/<project>/docker/nginx/ssl/<your-domain>

例如 Docker 部署的 Nginx 可以将证书统一放在 nginx/ssl 目录下,方便后续在 Nginx 配置中引用。

6. 安装证书并重启 Nginx

将证书安装到指定目录:

$ ~/.acme.sh/acme.sh --install-cert \
  -d '*.<your-domain>' \
  --ecc \
  --key-file /root/<project>/docker/nginx/ssl/<your-domain>/privkey.pem \
  --fullchain-file /root/<project>/docker/nginx/ssl/<your-domain>/fullchain.pem \
  --reloadcmd "cd /root/<project>/docker && docker compose restart nginx"

参数说明:

如果不是 Docker 部署,也可以将 --reloadcmd 修改为:

$ systemctl reload nginx

或:

$ systemctl restart nginx

7. 设置证书自动续期

查看当前定时任务:

$ crontab -l

添加 acme.sh 自动续期任务:

$ echo "~/.acme.sh/acme.sh --cron --home ~/.acme.sh" >> /etc/crontab

acme.sh 会定期检查证书有效期,并在需要续期时自动完成续期操作。由于前面已经配置了 --reloadcmd,证书续期成功后也会自动重启或重载 Nginx。

8. 注意事项

  1. 执行安装命令前,确保服务器已经安装 curl
  2. 阿里云 Ali_KeyAli_Secret 需要具备 DNS 解析管理权限。
  3. AccessKey 属于敏感信息,不能写入公开仓库或博客原文中。
  4. 通配符证书必须使用 DNS 验证方式,不能使用普通 HTTP 文件验证方式。
  5. 证书续期任务添加后,会自动定期检查并续期证书,一般无需手动操作。
  6. 如果使用 Docker 部署 Nginx,需要确认 --reloadcmd 中的路径和服务名称与实际部署一致。

9. 敏感信息脱敏说明

本文中的以下内容已做脱敏处理:

<aliyun-access-key-id>
<aliyun-access-key-secret>
<your-domain>
<project>

实际使用时,请替换为自己的服务器路径、域名和阿里云 DNS API 凭证。

版权所有,本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可。转载请注明出处:https://www.wangjun.dev//2026/04/acme-sh-letsencrypt-wildcard-ssl/