如何通过acme.sh在群晖上申请ZeroSSL泛域名证书并自动续期适配80端口封锁?

摘要:说明 适配场景:运营商封锁 80 端口,无法通过 HTTP-01 验证申请证书 证书类型:泛域名 SSL 证书(xjunqiang.cn + *.xjunqiang.cn),有效期 90 天 核心
说明 适配场景:运营商封锁 80 端口,无法通过 HTTP-01 验证申请证书 证书类型:泛域名 SSL 证书(xjunqiang.cn+ *.xjunqiang.cn),有效期 90 天 核心保障:自动续期 + 自动同步到指定证书目录,永久有效 一、前置准备 群晖开启 SSH 并登录,切换 root 用户: sudo -i 获取阿里云 AccessKey(域名解析需托管在阿里云): 登录阿里云控制台 → 头像 → AccessKey 管理 → 创建 AccessKey 保存AccessKey ID和AccessKey Secret(后续配置用) 二、安装 acme.sh(适配群晖精简系统) # 强制安装acme.sh(忽略crontab/socat提示) curl https://get.acme.sh | sh -s email=你的邮箱@163.com --force # 加载acme.sh(群晖ash shell无需bashrc) alias acme.sh='/root/.acme.sh/acme.sh' 三、配置阿里云 API 并申请证书(DNS-01 验证) # 替换为你的阿里云AccessKey export Ali_Key="你的AccessKey ID" export Ali_Secret="你的AccessKey Secret" # 申请泛域名证书(自动添加/删除DNS TXT记录) /root/.acme.sh/acme.sh --issue --dns dns_ali -d xjunqiang.cn -d *.xjunqiang.cn --force 等待脚本执行完成,看到Cert success即为申请成功 证书生成路径:/root/.acme.sh/xjunqiang.cn_ecc/ 四、将证书部署到未使用的 QU91tw 目录(安全替换) # 1. 备份QU91tw原证书 mkdir -p /usr/syno/etc/certificate/_archive/QU91tw/bak cp /usr/syno/etc/certificate/_archive/QU91tw/*.pem /usr/syno/etc/certificate/_archive/QU91tw/bak/ # 2. 清空QU91tw旧证书 rm -f /usr/syno/etc/certificate/_archive/QU91tw/{cert,chain,fullchain,privkey}.pem # 3. 复制新证书(适配acme.sh的.cer格式→群晖.pem格式) cp /root/.acme.sh/xjunqiang.cn_ecc/xjunqiang.cn.cer /usr/syno/etc/certificate/_archive/QU91tw/cert.pem cp /root/.acme.sh/xjunqiang.cn_ecc/ca.cer /usr/syno/etc/certificate/_archive/QU91tw/chain.pem cp /root/.acme.sh/xjunqiang.cn_ecc/fullchain.cer /usr/syno/etc/certificate/_archive/QU91tw/fullchain.pem cp /root/.acme.sh/xjunqiang.cn_ecc/xjunqiang.cn.key /usr/syno/etc/certificate/_archive/QU91tw/privkey.pem # 4. 修复证书权限(群晖硬性要求) chmod 400 /usr/syno/etc/certificate/_archive/QU91tw/*.pem chown root:root /usr/syno/etc/certificate/_archive/QU91tw/*.pem # 5. 验证证书有效期(应显示2026-03-26) openssl x509 -in /usr/syno/etc/certificate/_archive/QU91tw/cert.pem -noout -dates 五、创建证书同步脚本(续期后自动覆盖 QU91tw)   这里的QU911w是我自己在DSM的证书正添加的,这个可以在SSH中去查看 # 创建同步脚本 cat > /root/.acme.sh/sync_qu91tw.sh << EOF #!/bin/bash # 同步续期后的证书到QU91tw cp /root/.acme.sh/xjunqiang.cn_ecc/xjunqiang.cn.cer /usr/syno/etc/certificate/_archive/QU91tw/cert.pem cp /root/.acme.sh/xjunqiang.cn_ecc/ca.cer /usr/syno/etc/certificate/_archive/QU91tw/chain.pem cp /root/.acme.sh/xjunqiang.cn_ecc/fullchain.cer /usr/syno/etc/certificate/_archive/QU91tw/fullchain.pem cp /root/.acme.sh/xjunqiang.cn_ecc/xjunqiang.cn.key /usr/syno/etc/certificate/_archive/QU91tw/privkey.pem # 修复权限 chmod 400 /usr/syno/etc/certificate/_archive/QU91tw/*.pem chown root:root /usr/syno/etc/certificate/_archive/QU91tw/*.pem # 重启nginx生效 systemctl restart nginx EOF # 给脚本添加执行权限 chmod +x /root/.acme.sh/sync_qu91tw.sh 六、绑定续期钩子(acme.sh 续期后自动执行同步) # 写入续期钩子到证书配置文件 sed -i '$a RENEW_HOOK="/root/.acme.sh/sync_qu91tw.sh"' /root/.acme.sh/xjunqiang.cn_ecc/xjunqiang.cn.conf # 验证钩子是否添加成功(显示RENEW_HOOK=脚本路径即成功) grep "RENEW_HOOK" /root/.acme.sh/xjunqiang.cn_ecc/xjunqiang.cn.conf 七、配置 DSM 任务计划(兜底同步,双重保险) 登录 DSM → 控制面板 → 任务计划 → 新增 → 「计划的任务」→ 「用户定义的脚本」 常规设置: 任务名称:证书同步到 QU91tw 用户:root(必须选 root) 勾选「启动时运行」(可选) 计划设置: 频率:每月 日期:23 号(acme.sh 续期后 1 天) 时间:凌晨 3 点 任务设置 → 执行命令:/root/.acme.sh/sync_qu91tw.sh 保存并测试运行(无报错即成功) 八、验证所有配置(可选) # 1. 查看acme.sh证书列表(确认Renew时间) /root/.acme.sh/acme.sh --list # 2. 手动测试同步脚本(无报错即成功) /root/.acme.sh/sync_qu91tw.sh # 3. 查看QU91tw证书最终有效期 openssl x509 -in /usr/syno/etc/certificate/_archive/QU91tw/cert.pem -noout -dates 九、备用命令(手动续期 / 同步) # 手动续期证书 /root/.acme.sh/acme.sh --renew -d xjunqiang.cn --force # 手动同步到QU91tw /root/.acme.sh/sync_qu91tw.sh # 回滚QU91tw原证书(如需恢复) cp /usr/syno/etc/certificate/_archive/QU91tw/bak/*.pem /usr/syno/etc/certificate/_archive/QU91tw/ && systemctl restart nginx ------------------------------------------------------------------------------------------------------------------------------------------ 核心保障逻辑 自动续期:acme.sh 默认提前 30 天(2026-02-23)自动续期证书 自动同步:续期后通过 RENEW_HOOK 自动执行脚本,同步新证书到 QU91tw 兜底同步:DSM 任务计划每月 23 号强制同步,避免钩子失效 权限保障:同步脚本自动修复证书权限,符合群晖要求 关键注意事项 阿里云 AccessKey 需保留 DNS 解析 API 权限,不可删除 / 禁用 证书有效期 90 天,续期后自动刷新,无需手动干预 同步脚本仅影响 QU91tw 目录,不干扰当前使用的 VfnWJK 证书 DSM 任务计划需确保用户为 root,否则无权限操作证书目录 ------------------------------------------------------------------完---------------------------------------------------------------------- 补充: 任务计划名称不要用中文,用英文的。 如何查看当前的默认证书(SSH):cat /usr/syno/etc/certificate/_archive/DEFAULT 如何查看自己在DSM中创建的证书信息(SSH):openssl x509 -in /usr/syno/etc/certificate/_archive/QU91tw/cert.pem -noout -dates 更新: 后续通过acme.sh发现有个错误 [Mon Mar 2 10:43:58 AM CST 2026] It seems that your API file is not correct. Make sure it has a function named: /root/.acme.sh/sync_qu91tw.sh_deploy [Mon Mar 2 10:43:58 AM CST 2026] Error encountered while deploying. 说明 acme.sh 的脚本格式不兼容,钩子跑失败了。只需要在任务计划中执行自动续签的脚本就可以了 修改错误的地方。 sed -i '/RENEW_HOOK/d; /post_renew/d' /root/.acme.sh/xjunqiang.cn_ecc/xjunqiang.cn.conf