Skip to content

使用acme给群晖配置ssl证书

✨文章摘要(AI生成)

本文介绍了如何使用acme.sh为群晖(Synology)NAS配置SSL证书,以提高数据传输的安全性。文章详细阐述了申请证书前的准备工作,包括获取CloudFlare的API令牌和区域ID,以及如何通过SSH登录到NAS。随后,文章指导用户安装acme.sh,申请证书,并将证书部署到DSM中。此外,还提供了证书续期的自动化脚本,并提醒用户注意一些潜在的问题,如软件版本不一致和群晖升级可能带来的影响。

TIP

在申请证书的时候,acme.sh 需要验证当前域名的所有权,有两种验证方式:HTTP 和 DNS 验证。HTTP 验证需要 443 端口能够访问,而 DNS 方式则不受此限制。

acme版本

  • acme.sh 版本:v3.0.8
  • 国内环境直接在 Gitee 中下载zip包解压后放在DSM共享文件夹中使用即可 点击前往

注意

若软件版本不一致,此笔记中的方法有较小的概率无效。之前遇到过 acme.sh 官方把环境变量名改为了大写,导致出了问题。下面的步骤,都附有官方的链接,如果有问题,可以直接访问对应的官方链接。

准备工作

获取CloudFlare的API令牌

登录CloudFlare之后,可以通过这个链接访问令牌页面:https://dash.cloudflare.com/profile/api-tokens

点击 创建令牌,使用 编辑区域DNS模板 ,在区域资源中选择 包括 - 特定区域 - 你的域名

随后设定一个令牌的有效期,点击继续即可生成令牌。

将令牌保存下来以备后用,因为CloudFlare是不保存令牌的,关掉页面就看不见了。

获取CloudFlare的区域 ID

登陆CloudFlare后点击要获取证书的域名,在打开的页面中右下角可以看到区域ID。

使用 ssh 登录到 nas

参考群晖官方文档: 点击前往

安装 acme.sh

执行 curl https://get.acme.sh | sh -s email=xxx@xxx.com 即可安装。如果报错提示需要安装 crontab,可以使用 --force 参数强制安装 curl https://get.acme.sh | sh -s email=xxx@xxx.com --force

更多信息参考 acme.sh 官方文档: 点击前往

申请证书

本步骤参考的是 acme.sh 的官方文档: 点击前往。使用的 DNS 服务商是 CloudFlare,此外,acme.sh 还支持很多 DNS 服务商(点击查看)。

  1. 申请 CloudFlare token,参考 CloudFlare 官方文档:点击查看

  2. 导出 token: export CF_Token="xxxx" ,注意替换为自己的token值

  3. 导出 email: export CF_Email="xxxx@xxx.com" ,注意替换为自己的邮箱

  4. 执行命令:/root/.acme.sh/acme.sh --issue --dns dns_cf --server letsencrypt -d xxx.com -d '*.xxx.com', 注意替换为自己的域名,以及 acme.sh 脚本的路径。

把证书部署到 DSM 中

本步骤参考的是 acme.sh 的官方文档:点击查看

  1. 导出群晖的管理员用户名: export SYNO_USERNAME="xxx"

  2. 导出群晖的管理员密码:export SYNO_PASSWORD="xxx"

  3. 导出群晖 DSM 使用的 http schema:export SYNO_SCHEME="http"。可选 http 或者 https,默认为 http

  4. 导出群晖 DSM 的 url:export SYNO_HOSTNAME="localhost"。可选,默认为 localhost

  5. 导出 DSM 所在的端口号:export SYNO_PORT="5000"。可选,默认为 5000

  6. 执行:/root/.acme.sh/acme.sh --deploy --deploy-hook synology_dsm -d xxx.com,如果开启了两步验证,会被要求输入 OTP 码(从群晖的 Secure SignIn APP 获取)

注意:

  • 以上环境变量需要区分大小写。
  • 如果终端使用了代理,请移除,否则 acme 可能会无法访问 localhost:5000。

我自己是申请完证书之后手动替换的,没有设置自动部署。

申请完证书之后终端窗口中会显示申请好的证书的相关文件存放路径,直接把相关文件夹拷贝出来即可。其中, *.key 文件是私钥, *.cer 文件是证书。

renew 证书

定时执行以下脚本即可更新证书的有效期:

shell
#!/bin/bash

export CF_Token="xxx"
export CF_Email="xxx@xxx.com"

/root/.acme.sh/acme.sh --renew -d xxx.com

export SYNO_USERNAME="xxx"
export SYNO_PASSWORD="xxx"
export SYNO_SCHEME="http"
export SYNO_HOSTNAME="localhost"
export SYNO_PORT="5000"

/root/.acme.sh/acme.sh --deploy --deploy-hook synology_dsm -d xxx.com

如何执行定时任务,可参考群晖官网文档: 点击查看

注意

如果将来升级了群晖的版本,.acme.sh 文件夹可能会被删除。

参考文档