群晖DSM7.2系统自动申请SSL证书 acme.sh
2026年3月更新,旧的不再用
不用ssh
申请两个域名证书并且同时使用,并且不覆盖
关键文件
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#!/bin/bash # 用途:自动续期 两个泛域名证书 # 容器名已改为 acme,强制使用 Let's Encrypt CA,避免 ZeroSSL 问题 # DSM 端口强制 https 5001,规避 localhost:5000 连接失败 CF_TOKEN="" # ← 替换成你的真实 Token SYNO_USER="" # ← 专用账户名 SYNO_PASS="" # ← 替换成真实密码(建议先改成纯字母数字避免特殊字符问题) DNSSLEEP=120 # ================= 域名1:exqw.com ================= # 签发证书(强制 Let's Encrypt,避免 ZeroSSL 邮箱注册) docker exec -e CF_Token="${CF_TOKEN}" acme \ acme.sh --log --issue --dns dns_cf --dnssleep ${DNSSLEEP} \ -d exqw.com -d "*.exqw.com" --server letsencrypt # 部署到 DSM(强制 https + 端口 5001) docker exec \ -e SYNO_USERNAME="${SYNO_USER}" \ -e SYNO_PASSWORD="${SYNO_PASS}" \ -e SYNO_SCHEME="https" \ -e SYNO_PORT="5001" \ -e SYNO_CERTIFICATE="exqw-wildcard" \ -e SYNO_CREATE=1 \ acme acme.sh --deploy -d exqw.com --deploy-hook synology_dsm --insecure --force # ================= 域名2:A.com ================= # 签发证书 docker exec -e CF_Token="${CF_TOKEN}" acme \ acme.sh --log --issue --dns dns_cf --dnssleep ${DNSSLEEP} \ -d A.com -d "*.A.com" --server letsencrypt # 部署到 DSM docker exec \ -e SYNO_USERNAME="${SYNO_USER}" \ -e SYNO_PASSWORD="${SYNO_PASS}" \ -e SYNO_SCHEME="https" \ -e SYNO_PORT="5001" \ -e SYNO_CERTIFICATE="域名A-wildcard" \ -e SYNO_CREATE=1 \ acme acme.sh --deploy -d A.com --deploy-hook synology_dsm --insecure --force echo "=== 续期任务完成 $(date '+%Y-%m-%d %H:%M:%S') ===" |
保存为renew_cert.sh,通过File Station 放入 /volume2/docker/acme
步骤 1:创建专用证书管理账户 certadmin(强烈推荐)
DSM 控制面板 → 用户与群组 → 创建
用户名:certadmin
描述:证书自动更新专用
加入群组:必须勾选 administrators(acme.sh synology_dsm hook 需要管理员权限才能通过 API 部署证书)
应用程序权限:全部禁止,只允许「DSM」(网页登录)
文件夹权限:全部不勾选
File Station 中,在 volume2(或常用卷)新建文件夹:
/docker/acme
步骤 3:创建 acme.sh 容器
Container Manager → 注册表 → 搜索 neilpang/acme.sh → 下载最新版(latest)。
创建:
名称:acme
启用自动重启:勾选
储存空间(Volume):
文件夹 → 宿主机路径:/volume2/docker/acme
容器路径:/acme.sh
端口:无需映射
网络:Host
环境变量:无需添加
命令:daemon
4:Cloudflare API Token
使用 Edit zone DNS 模板
权限:Zone → DNS → Edit
Zone Resources:包含两个域名,增加方式
创建 → 复制 Token(格式如 zfNp-xxx…)
任务计划新增
bash /volume2/docker/acme/renew_cert.sh >> /volume2/docker/acme/renew.log 2>&1
Mark
你好,运行最后一步报这个问题,账号没有开启两步验证
Enter OTP code for user ‘root’: Enter device name or leave empty for default (CertRenewal): [Wed Sep 27 12:54:09 UTC 2023] Unable to authenticate to http://localhost:5000 – check your username & password.
[Wed Sep 27 12:54:09 UTC 2023] If two-factor authentication is enabled for the user, set SYNO_Device_ID.
[Wed Sep 27 12:54:09 UTC 2023] Error deploy for domain:xxx.xx
[Wed Sep 27 12:54:09 UTC 2023] Deploy error.
E星期五
拉取旧版本镜像试试,如:neilpang/acme.sh:3.06