面板与 NAS

群晖 NAS 配置 Let's Encrypt SSL 证书

作者: · 最后核实

群晖 NAS 有两种方式获取 nas.example.com 的 Let's Encrypt 受信任证书:80 端口能通时用 DSM 自带的“从 Let's Encrypt 获取证书”,国内家宽 80 端口被封时用 acme.sh 走 DNS 验证再部署到 DSM。两种方式都能自动续期,DSM 各项服务可以共用这张证书。适用于 DSM 7.2 及以上,菜单名称以群晖知识中心为准。

前提条件

先根据网络情况选路线。

  • DSM 7.2 及以上的群晖 NAS,以及管理员账户。
  • 域名 nas.example.com 的 A 记录指向家里的公网 IP(例如 203.0.113.10),或使用 synology.me DDNS 主机名。
  • DSM 自带 Let's Encrypt 路线:路由器把公网 80 端口转发到 NAS。
  • acme.sh 路线:在“控制面板 → 终端机和 SNMP”里启用 SSH;域名在阿里云 DNS 或 DNSPod,并准备好只能管理解析的子账号密钥(见 acme.sh + 阿里云 DNS/DNSPod)。不需要开放入站端口。

第一步:DSM 自带 Let's Encrypt(80 端口能通时)

80 端口能从公网访问时,DSM 可以自己申请并安装 Let's Encrypt 证书。打开 控制面板 → 安全性 → 证书 → 新增 → 添加新证书 → 从 Let's Encrypt 获取证书,域名填 nas.example.com,填写电子邮件和主题备用名称,点击完成。DSM 通过 80 端口完成验证并安装证书。

使用 synology.me 的,也可以在 控制面板 → 外部访问 → DDNS 里新增或编辑群晖 DDNS,勾选从 Let's Encrypt 获取证书并设为默认证书的选项。

第二步:acme.sh + DNS 验证(80 端口被封时)

SSH 登录 NAS 并切换到 root,把 acme.sh 安装到固定目录,不使用它自带的 cron:

sudo -i
cd /tmp
curl -L -o acme.sh.tar.gz https://github.com/acmesh-official/acme.sh/archive/refs/heads/master.tar.gz
tar -xzf acme.sh.tar.gz && cd acme.sh-master
./acme.sh --install --nocron --home /usr/local/share/acme.sh -m admin@example.com

用阿里云 DNS 签发(DNSPod 把 dns_ali 换成 dns_tencent,变量换成 Tencent_SecretId、Tencent_SecretKey):

export Ali_Key="your-access-key-id"
export Ali_Secret="your-access-key-secret"
/usr/local/share/acme.sh/acme.sh --home /usr/local/share/acme.sh \
  --set-default-ca --server letsencrypt
/usr/local/share/acme.sh/acme.sh --home /usr/local/share/acme.sh \
  --issue --dns dns_ali -d nas.example.com

NAS 访问 GitHub 慢的,可以在电脑上下载 acme.sh 压缩包后通过 File Station 上传到 NAS 再解压。acme.sh wiki 有群晖专页,路径等细节以其为准。

第三步:把证书部署到 DSM

acme.sh 的 synology_dsm 部署钩子负责把证书导入 DSM。在 NAS 本机运行时用临时管理员方式:

export SYNO_USE_TEMP_ADMIN=1
export SYNO_CREATE=1
/usr/local/share/acme.sh/acme.sh --home /usr/local/share/acme.sh \
  --deploy -d nas.example.com --deploy-hook synology_dsm

SYNO_CREATE=1 只在首次部署时需要。acme.sh 会记住部署钩子,以后每次续期后自动重新部署。

第四步:给各项服务指定证书

DSM 的每项服务可以单独指定证书。在 控制面板 → 安全性 → 证书 里选中新证书,需要全局使用就点“设为默认证书”,再点“设置”,把 DSM、Synology Photos、WebDAV 等服务逐个改成这张证书。

验证

配置正确时,DSM 的 HTTPS 端口返回主题为 nas.example.com、颁发者为 Let's Encrypt 的证书,而不是旧的自签名证书。用 openssl 检查 DSM 在 HTTPS 端口上返回的证书:

openssl s_client -connect nas.example.com:5001 -servername nas.example.com </dev/null 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates

NAS(或 NAS 上的反向代理)能通过 443 从外网访问时,用 SSL 证书检查,或在终端运行:

curl ssl.sh/nas.example.com

自动续期

DSM 自己从 Let's Encrypt 获取的证书由 DSM 自动续期,前提是 80 端口转发和域名解析一直有效。acme.sh 路线在 控制面板 → 任务计划 → 新增 → 计划的任务 → 用户定义的脚本 里创建任务,用户选 root,每天运行一次:

/usr/local/share/acme.sh/acme.sh --cron --home /usr/local/share/acme.sh

acme.sh 3.1.4 起按 Let's Encrypt 的 ARI 窗口续期,续期后自动执行 synology_dsm 钩子。Let's Encrypt 默认证书 2027 年 2 月 10 日起为 64 天、2028 年 2 月 16 日起为 45 天,每天运行一次正合适。NAS 能从外网访问的,可以加到 ssl.sh 监控(开发中)。

常见问题排查

  • DSM 提示 Let's Encrypt 无法连接:80 端口没转发、被运营商封禁或解析不对,原因和 certbot 连接超时 相同,改走 acme.sh DNS 验证。
  • 浏览器仍显示群晖自签名证书:服务还指定着旧证书,见 NET::ERR_CERT_AUTHORITY_INVALID。
  • 域名不匹配:用 IP 或 QuickConnect 地址访问了,改用 nas.example.com,见 NET::ERR_CERT_COMMON_NAME_INVALID。
  • synology_dsm 部署报登录错误:临时管理员方式只能在 NAS 本机使用;在其他机器上部署要按 acme.sh wiki 设置 SYNO_USERNAME、SYNO_PASSWORD、SYNO_HOSTNAME 等变量。
  • DSM 升级后不再续期:检查任务计划是否还在、acme.sh 目录是否完整。

常见问题

NAS 不想暴露到公网,也能用受信任证书吗?

能。DNS-01 验证通过 DNS 服务商 API 完成,NAS 可以只在内网或 VPN 里访问,照样使用 nas.example.com 的受信任证书。内网访问时把 nas.example.com 解析到 NAS 的内网 IP(路由器或内网 DNS 里设置)即可。

家宽没有公网 IP 或者 443 端口也被封,怎么办?

证书申请走 DNS-01 不受影响。外网访问可以用非标准端口(如 5001)配合端口转发,或使用群晖 QuickConnect;但 QuickConnect 地址不在你的证书里,浏览器访问时用的是群晖自己的证书。

装好证书后浏览器为什么还提示不安全?

常见原因:用 IP 或不在证书里的域名访问;该服务仍然指定的是旧的自签名证书。在“证书 → 设置”里把服务改成新证书,并用证书里的域名访问。

资料来源

  1. Synology 知识中心:证书(DSM)
  2. acme.sh wiki: deploy hooks (synology_dsm)
  3. acme.sh wiki: How to use DNS API
  4. Let's Encrypt: Challenge Types