群晖DSM7.2系统自动申请SSL证书 acme.sh

By | 2023 年 9 月 2 日 星期六 22:10

2026年3月更新,旧的不再用
不用ssh
申请两个域名证书并且同时使用,并且不覆盖
关键文件

#!/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

2 thoughts on “群晖DSM7.2系统自动申请SSL证书 acme.sh

  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.

    Reply

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理