目录
Dify 中使用 acme.sh 申请 Let’s Encrypt 通配符 SSL 证书
- 1. 安装 acme.sh
- 2. 切换默认 CA 为 Let’s Encrypt
- 3. 设置阿里云 DNS 解析变量
- 4. 签发通配符 SSL 证书
- 5. 创建证书目录
- 6. 安装证书并重启 Nginx
- 7. 设置证书自动续期
- 8. 注意事项
- 9. 敏感信息脱敏说明
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>"
其中:
Ali_Key:阿里云 AccessKey IDAli_Secret:阿里云 AccessKey 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"
参数说明:
--key-file:私钥文件输出路径--fullchain-file:完整证书链输出路径--reloadcmd:证书安装或续期成功后执行的重载命令docker compose restart nginx:重启 Docker 中的 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. 注意事项
- 执行安装命令前,确保服务器已经安装
curl。 - 阿里云
Ali_Key和Ali_Secret需要具备 DNS 解析管理权限。 - AccessKey 属于敏感信息,不能写入公开仓库或博客原文中。
- 通配符证书必须使用 DNS 验证方式,不能使用普通 HTTP 文件验证方式。
- 证书续期任务添加后,会自动定期检查并续期证书,一般无需手动操作。
- 如果使用 Docker 部署 Nginx,需要确认
--reloadcmd中的路径和服务名称与实际部署一致。
9. 敏感信息脱敏说明
本文中的以下内容已做脱敏处理:
<aliyun-access-key-id>
<aliyun-access-key-secret>
<your-domain>
<project>
实际使用时,请替换为自己的服务器路径、域名和阿里云 DNS API 凭证。