# 群晖 NAS 配置 SSL 证书：Let's Encrypt 与 acme.sh DNS 验证

> 给群晖 NAS 配置受信任证书：DSM 自带 Let's Encrypt（需 80 端口）、synology.me DDNS，或家宽 80 端口被封时用 acme.sh 走阿里云/DNSPod DNS 验证并自动部署。

Source: https://ssl.sh/zh/guides/synology-nas-ssl/
Last updated: 2026-11-10

群晖 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](https://ssl.sh/zh/guides/acme-sh-dnspod-aliyun-dns/)）。不需要开放入站端口。

## 第一步：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：

```bash
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`）：

```bash
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 本机运行时用临时管理员方式：

```bash
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 端口上返回的证书：

```bash
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 证书检查](https://ssl.sh/zh/tools/ssl-checker/)，或在终端运行：

```bash
curl ssl.sh/nas.example.com
```

## 自动续期

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

```bash
/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 监控](https://ssl.sh/zh/monitor/)（开发中）。

## 常见问题排查

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