Loading... 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](https://github.com/Eagle3386)),所以才有了这篇文章 相关issue:[issue #2727](https://github.com/acmesh-official/acme.sh/issues/2727) 相关PR:[PR #4646](https://github.com/acmesh-official/acme.sh/pull/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 ``` 2. 第二种方式 因为国内网络特殊性以及群晖本身系统奇葩,个人建议还是去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 ``` ## ~替换部署脚本(非必要)~ ~目前PR#4646已经被喝油到master分支,无需更换脚本~ ``` # 备份原脚本 cd ./deploy cp synology_dsm.sh synology_dsm.sh.bak # 下载PR #4646的dsm deploy脚本 curl -O https://raw.githubusercontent.com/acmesh-official/acme.sh/0548ad2fc6b4febe557620ec2280bdec6b7ec304/deploy/synology_dsm.sh # 当前路径切换至acme.sh程序目录 cd /usr/local/share/acme.sh ``` # 申请证书 参照我以前发过的文章: <div class="preview"> <div class="post-inser post box-shadow-wrap-normal"> <a href="https://blog.litchi.ren/index.php/archives/10282/" target="_blank" class="post_inser_a no-external-link no-underline-link"> <div class="inner-image bg" style="background-image: url(https://blog.litchi.ren/usr/themes/handsome/assets/img/sj/2.jpg);background-size: cover;"></div> <div class="inner-content" > <p class="inser-title">acme.sh免费90天泛域名证书简易说明</p> <div class="inster-summary text-muted"> LINUX系统安装 acme.shcurl https://get.acme.sh | sh -s email=m... </div> </div> </a> <!-- .inner-content #####--> </div> <!-- .post-inser ####--> </div> (可选)2024/3/10:目前zerossl对免费申请的证书校验有点毛病,推荐通过--server换成letsencrypt ``` # 设置环境参数(DnsPod) export DP_Id="填写API ID" export DP_Key="填写API Key" # 申请泛域名证书 /root/.acme.sh/acme.sh --issue --dns dns_dp -d example.com -d *.example.com [--server letsencrypt] ``` # 部署默认证书 ## 使用临时管理员 这个方法适合没使用二步认证的群晖设备 ``` # 创建并使用临时管理员,部署完成后会自动删除 export SYNO_USE_TEMP_ADMIN=1 # 部署证书 /root/.acme.sh/acme.sh --deploy --home /root/.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对应的群晖账号的二步验证密码` ``` `期间会提示你输入一次上述SYNO_Username对应的群晖账号的二步验证密码` ``` `输入完毕成功部署后,脚本就会在对应的域名证书目录下记录保存,以后就不用再输入账号、密码和二步验证密码了` ``` # 查看保存信息 cat /root/.acme.sh/example.com_ecc/example.com.conf ``` # 添加计划任务自动更新和部署证书 这里注意一下,acme.sh默认只在证书到期前一个月才会真正检测到证书即将到期触发更新,想要强制更新可以添加参数 `--force` 而证书部署只要执行了就会进行部署,所以我个人是每周六执行一次证书检查更新,每个月1日0点执行一次证书部署,避免频繁重新部署DSM的默认证书 ``` # 证书检查更新 /root/.acme.sh/acme.sh --cron --home /root/.acme.sh # 在部署证书前提权一下,个人测试不提权会部署失败 sudo su root # 部署证书 /root/.acme.sh/acme.sh --deploy --home /root/.acme.sh --deploy-hook synology_dsm -d "example.com" ``` ![创建计划任务1](https://blog.litchi.ren/usr/uploads/2025/01/4194964343.png) ![创建计划任务2](https://blog.litchi.ren/usr/uploads/2025/01/2813386009.png) 这里只放了检查证书到期更新的命令,有需要连着部署一起执行的,自行添加更改 ![创建计划任务3](https://blog.litchi.ren/usr/uploads/2025/01/3682645487.png) 最后修改:2025 年 01 月 05 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏