前言
群晖 NAS 内置了 Let’s Encrypt 的证书申请功能,可以为其申请免费的 SSL 证书,并且可以指定域名。然而,群晖 NAS 内置的证书申请功能需要开放能被 Let’s Encrypt 访问的 80 或 443 端口,很多时候这是无法做到的。因此,我们需要另辟蹊径,使用 acme.sh
和 Docker,通过 DNS 验证的方式为群晖 NAS 申请 SSL 证书。这个做法的好处在于,不需要修改 NAS 的系统配置,也不需要通过 SSH 登录到 NAS 的命令行,便于备份和迁移的同时,没有因为误操作而导致系统损坏的风险。
准备工作
准备 acme.sh
镜像
首先,在套件中心中安装 Container Manager:
由于网络原因,需要在 Container Manager 中手动添加一个 Docker 镜像源才能正常使用。在网络上找到一个可用的 Docker 镜像源地址,然后打开 Container Manager,选择左侧的「注册表」,点击上方的「设置」,在设置窗口中点击「添加」,输入镜像源的地址,然后点击「应用」,回到设置窗口中,选中新添加的镜像源,点击「使用」,最后关闭设置窗口:
在搜索框中搜索 neilpang/acme.sh
镜像。注意由于群晖的搜索机制的原因,正确结果可能出现在非常靠后的位置,需要耐心翻页。找到 neilpang/acme.sh
镜像后,点击上方的下载按钮,标签保持 latest
即可:
准备存储空间
在群晖 NAS 中创建一个文件夹,用以存放 acme.sh
的配置文件和证书文件。推荐单独为了各类 Docker 容器创建一个共享文件夹,然后在其中创建一个 acme-sh
文件夹:
注意:配置文件和证书文件中可能包含敏感信息,因此请不要将其放在公共可访问的位置!
申请 SSL 证书
做完上述准备工作后,我们就可以开始申请 SSL 证书了。申请证书的全过程都在 Docker 容器的命令行中进行。
创建 acme.sh
容器
在 Container Manager 中,点击左侧的「映像」,找到 neilpang/acme.sh
镜像,选中之后点击上方的「运行」:
在弹出的向导中,填写容器的名称,并且勾选「启用自动重新启动」,然后点击「下一步」:
在「高级设置」中,找到「存储空间设置」,点击「添加文件夹」,选择之前创建的 acme-sh
文件夹,右侧填写 /acme.sh
,权限保持「读取/写入」:
向下翻动页面,找到「网络」,将网络模式更改为「host」;找到「执行命令」,在「命令」中填写 daemon
,其他设置保持默认,然后点击「下一步」:
确认设置后,点击「应用」,等待容器启动:
打开终端
回到 Container Manager 的「容器」页面,找到刚刚创建的 acme.sh
容器,点击上方的「操作」,选择「打开终端机」:
在弹出的窗口中,选择「新增」右侧的下拉按钮,点击「通过命令启动」,输入 /bin/sh
,然后点击「确定」:
点击左侧的 sh
,应该能看到一个命令行窗口,以下的操作都在这个窗口中进行:
注册 ZeroSSL
acme.sh
默认使用 ZeroSSL 作为 ACME 服务商,因此我们需要注册 ZeroSSL。在命令行中执行(注意替换为自己的邮箱地址):
acme.sh --register-account -m myemail@example.com --server zerossl
如果你已经在 ZeroSSL 的网站上注册过,可以参考 acme.sh
的文档,使用 EAB 绑定。
申请证书
接下来,我们就可以申请证书了。根据你的 DNS 服务商,选择合适的生成 Token 的方式,这里以 Cloudflare 为例。在命令行中执行(注意替换为自己的 Zone ID、Token 和域名):
export CF_Zone_ID="your_zone_id"
export CF_Token="your_token"
acme.sh --issue --dns dns_cf -d your.domain.com
等待一段时间之后,证书就会生成在 /acme.sh/your.domain.com
目录下,同时证书的相关信息也会输出到命令行中:
安装证书
最后,我们需要将证书安装到群晖 NAS 上。在命令行中执行(注意替换为自己的群晖用户名和密码,以及域名):
export SYNO_USERNAME="your_synology_username"
export SYNO_PASSWORD="your_synology_password"
acme.sh --deploy -d your.domain.com --deploy-hook synology_dsm
至此,我们已经成功为群晖 NAS 申请了 SSL 证书,并且安装到了系统中。完成以上步骤之后,可以在终端机删除掉 sh
,但是不要删除 acme.sh
容器,它会定期完成证书的更新工作。
配置证书
在群晖 NAS 的控制面板中,找到「安全性」-「证书」,可以看到刚刚申请的证书已经安装到系统中:
点击「设置」,可以将证书应用到 HTTPS 服务中:
再次访问服务,可以看到已经使用了新的证书: