2025/4/24:发现一些问题和技巧,群晖在系统更新后会清空/root路径下所有文件;

由于腾讯云归并了dnspod,腾讯云的API已建议使用腾讯云API密钥代替掉dnspod token

acme dns api的dns_dp官方已建议弃用改为dns_tencent

注:文章内计划任务截图的脚本内容没有更新,具体以文章内文字为准

2024/11/8:内容没有大改动,官方github已经把DSM7相关的hook脚本PR#4646到main分支,当前版本是v3.1.0,已经不用手动替换部署脚本了

2024/3/10:发现证书失效,acme.sh对群晖的证书部署有了不少更新,修正一下这篇文章

好久没有水博客了…………

今天个人总结一下群晖使用acme.sh在一次部署后全自动更新证书以及部署到群晖DSM系统的使用流程

前言

由于DSM有自己“完整”的一套证书部署流程,所以在参考网上目前能轻松搜索到的已有的教程,发现基本都已经过时了,并没有用上DSM7新的API去操作证书部署

后来发现一直在用的acme.sh原来已经有群晖的deploy hook,但是官方Wiki以及外网上的教程也是过时的

并且acme.sh的官方Github项目内的PR已经有大佬针对DSM7的改良部署脚本(感谢@Eagle3386),所以才有了这篇文章

相关issue:issue #2727

相关PR:PR #4646

准备工作

下载安装acme.sh

首先要开启DSM的SSH管理功能,然后使用SSH相关软件登录后台

  1. 第一种方式
# 提权至root账号
sudo su

# 找一个方便的路径存放acme.sh, 这里我选择了root的根目录/root
cd ~

# 通过官方脚本安装, 因为群晖没有crontab,所以需要加--force参数强制安装
curl https://get.acme.sh | sh -s email=my@example.com --force
  1. 第二种方式

因为国内网络特殊性以及群晖本身系统奇葩,个人建议还是去Github把master分支在本地方便访问的设备上git clone或者打包zip下来,再上传到群晖内挪到你想要的路径,最后解压

# 解压zip并安装,同上需要--force
unzip acme.sh-master.zip -d acme.sh
cd acme.sh
./acme.sh --install -m my@example.com --force

注:往下部分如果在管理员账号下安装acme.sh,默认路径会是:/var/services/homes/zakikun/.acme.sh

申请证书

参照我以前发过的文章:acme.sh免费90天泛域名证书简易说明

(可选)2024/3/10:目前zerossl对免费申请的证书校验有点毛病,推荐通过--server换成letsencrypt

# 设置环境参数(腾讯云/DnsPod)
export Tencent_SecretId=填写SecretId
export Tencent_SecretKey=填写SecretKey

# 申请泛域名证书
/var/services/homes/zakikun/.acme.sh/acme.sh --issue --dns dns_tencent -d example.com -d *.example.com [--server letsencrypt]

部署默认证书

使用临时管理员

这个方法适合没启用二步认证或者不想定期手动刷新一下二步认证的群晖用户

# 创建并使用临时管理员,部署完成后会自动删除
export SYNO_USE_TEMP_ADMIN=1

# 部署证书
/var/services/homes/zakikun/.acme.sh/acme.sh --deploy --home /var/services/homes/zakikun/.acme.sh -d example.com --deploy-hook synology_dsm

使用已有管理员账号

默认只需要设置账号和密码环境变量即可,如果开启二步认证2FA功能,则必须加上SYNO_DEVICE_NAME给acme.sh调用赋名

export SYNO_Username='Zakikun'
export SYNO_Password='账号密码'
export SYNO_DEVICE_NAME="CertRenewal"

期间会提示你输入一次上述SYNO_Username对应的群晖账号的二步验证密码

"Enter OTP code for user 'Zakikun': 

输入完毕成功部署后,脚本就会在对应的域名证书目录下记录保存,以后就不用再输入账号、密码和二步验证密码了

# 查看保存信息
cat /var/services/homes/zakikun/.acme.sh/example.com_ecc/example.com.conf

添加计划任务自动更新和部署证书

这里注意一下,acme.sh默认只在证书到期前一个月才会真正检测到证书即将到期触发更新,想要强制更新可以添加参数 --force

而证书部署只要执行了就会进行部署,所以我个人是每周六执行一次证书检查更新,每个月1日0点执行一次证书部署,避免频繁重新部署DSM的默认证书

# 证书检查更新
/var/services/homes/zakikun/.acme.sh/acme.sh --cron --home /var/services/homes/zakikun/.acme.sh

# 在部署证书前提权一下
sudo su root

# 部署证书
/var/services/homes/zakikun/.acme.sh/acme.sh --deploy --home /var/services/homes/zakikun/.acme.sh --deploy-hook synology_dsm  -d example.com

创建任务1

创建任务2

这里只放了检查证书到期更新的命令,有需要连着部署一起执行的,自行添加更改

创建任务3

最后修改:2025 年 04 月 27 日
个人分享,随意打赏