考虑到 ZeroSSL 对比 Let's Encrypt 有更好兼容性,且接口不存在使用频率的限制。因此本脚本默认使用 ZeroSSL 作为证书签发服务器。
部署教程
1、启用 SSH 服务
进入 DSM 控制面板 > 终端机和 SNMP > 终端机,勾选启用 SSH 服务。指定 SSH 连接的端口号并保存设置。为了确保系统安全性,建议将默认端口 22
替换为其他端口号。更多详见《群晖 Synology 如何获取 root 权限?》
2、克隆源码
# 切换为root用户 sudo -i # 进入目录 cd /volume1 # DSM 6.x 系统 git clone https://github.com/hugoyue/syno-acme.git # DSM 7.x 系统 git clone -b dsm7 https://github.com/hugoyue/syno-acme.git
3、配置文件
使用 vim
命令修改 config
配置文件
vim /volume1/syno-acme/config
根据注释信息,进行修改:
# 你主域名,如 baidu.com sina.com.cn 等 export DOMAIN=your_domain # DNS类型,根据域名服务商而定,例如阿里云对应(dns_ali),Dnspod 对应(dns_dp)等 export DNS=dns_xxx # DNS API 生效等待时间 值(单位:秒) # 某些域名服务商的API生效时间较大,需要将这个值加大(比如900) export DNS_SLEEP=600 # 填写用于注册 ZeroSSL 账号的邮箱 export [email protected] # 填写 dns_ali 对应阿里云域名服务商提供的授权密钥 export Ali_Key="LTqIA87hOKdjevsf5" export Ali_Secret="0p5EYueFNq501xnCPzKNbx6K51qPH2" # 填写 DNS=dns_dp 对应 DNS 域名平台提供的授权密钥 export DP_Id="1234" export DP_Key="sADDsdasdgdsf"
其它域名服务商,可以参照 https://github.com/acmesh-official/acme.sh/tree/master/dnsapi 来添加自己的配置。一般情况下,这个页面每个文件对应一个域名服务商,比如 dns_ali.sh
对应阿里云,文件名去掉.sh
扩展名就是 DNS 类型,比如阿里云的 DNS 类型就是 dns_ali
。
4、脚本执行
# 赋予执行权限 chmod +x /volume1/syno-acme/cert-up.sh # 生成证书/更新证书 /volume1/syno-acme/cert-up.sh update >> /volume1/syno-acme/log.txt 2>&1
定时任务
免费的 ZeroSSL 证书有效期只有三个月,这里我们配置一条定时任务,使其保持在每月 1 日 1 时整,执行一次更新
# 编辑 crontab 文件 vim /etc/crontab # 增加一条任务计划,保存并退出 0 1 1 * ? root /volume1/syno-acme/cert-up.sh update >> /volume1/syno-acme/log.txt 2>&1
重启 CRON 服务,使其生效。
# DSM 6.x 系统 synoservice --restart crond # DSM 7.x 系统 synosystemctl restart crond
日常维护
1)执行回滚
更新证书命令执行过程中,会以当前系统日期时间命名创建文件夹,为当前系统证书创建备份,备份文件路径位于 /volume1/syno-acme/backup
下,存放于以时间日期命名的文件夹内,例如 20221023030003
# 回滚到最近的一次备份 /volume1/syno-acme/cert-up.sh revert # 回滚到指定日期、时间的备份,例如 20221023030003 /volume1/syno-acme/cert-up.sh revert 20221023030003
2)日志查看
查看最近 1000 条日志记录,寻找问题根源。
tail -n 1000 /volume1/syno-acme/log.txt