前言
目前 acme 协议版本更新,开始支持泛域名(wildcard),也就是说,可以申请一个类似 *.domain.com 的单一证书,就可以适配 abc.domain.com,xyz.domain.com 这类的子域名,而不需要单独为每个子域名申请证书了。
acmesh-official/acme.sh 工具已经支持新的协议,我这篇文章就是在这个工具的基础上,实现泛域名的自动更新。为了减少复杂度,我们使用 ANDYZHSHG 编写的一键更新的懒人脚本。
项目地址:https://github.com/andyzhshg/syno-acme
1. 准备工作
因为这个方法是一键替换群晖的默认证书,所以,为了防止意外,最好保证你的证书列表里只有一条记录,即默认证书那一条。实际上因为支持了泛域名证书,基本上这一条记录就足够用了(当然,如果你要管理多个域名,可能本文的方法并不适用)。开始工作前你的证书列表大概应该是这个样子:
2. 下载一键更新脚本
这是一键脚本的项目地址:andyzhshg/syno-acme。
如果你对项目本身不感兴趣,可以直接下载打包好的工具:syno-acme v0.3.0。
可以通过 File Station 将下载的工具上传到NAS的任意目录下,并解压。
解压后大概是这个样子:
3. 配置脚本参数
编辑脚本的配置文件 config:
如图所示,需要编辑的几个字段我用红框标记出来了。
首先是 DOMAIN,也就是你的域名。
然后是 DNS 的类型,根据服务商的不同,DNS 类型各不相同,比如
– 阿里云(dns_ali)
– Dnspod(dns_dp)
– Godaddy(dns_gd)
最后要根据不同的域名服务商提供的授权密钥等信息,比如我的域名服务商是腾讯云,我需要编辑 DP_Id和 DP_Key 字段,字段的内容需要到域名服务商的管理后台来查看,因为不同的服务商的查看方式不同,请大家根据自己的实际情况去查找。
需要指出的是,我给出的配置文件模板并没有给出所有acme.sh支持的域名服务商,大家可以参照https://github.com/acmesh-official/acme.sh/tree/master/dnsapi 来添加自己的配置。一般情况下,这个页面每个文件对应一个域名服务商,比如 dns_ali.sh 就是对应阿里云,文件名去掉 .sh 扩展名就是 DNS 类型,比如阿里云的 DNS 类型就是 dns_ali。打开对应文件, 一般都可以在文件的头部找到需要设置的授权信息对应的密钥,比如阿里云的授权密钥所在的位置如下图所示:
config 模板中没有的服务商,请大家自行完善。
4. 配置定时任务
- 查找脚本路径
在 File Station 中定位到下载的一键脚本的目录,查看该脚本的绝对路径:
复制完整的绝对路径到剪贴板。 -
创建定时任务
打开 控制面板 / 任务计划 / 新增 / 计划的任务 / 用户自定义的脚本:
设置任务名称和操作用户,需要注意的是这里一定要选择 root:
/volume1/nas_share/certs/syno-acme/cert-up.sh update >> /volume1/nas_share/certs/syno-acme/log.txt 2>&1
具体的路径是步骤 1 中复制的路径。
- 试运行脚本
可以在新建的任务上点击右键立即执行任务:
这样脚本就会运行,自动更新证书,并重启web服务器加载新的脚本。以后,NAS 会每隔一个月执行一次该脚本,自动更新证书。
总结
这个一键脚本的特点是最小限度的触碰系统文件,仅 /usr/syno/etc/certificate/_archive 目录会被更改。acme.sh 工具随用随时下载,保持最新,用完即删除,不占用磁盘空间。
感谢你一直在维护这个脚本,我从 1.0 用到 2.0,现在新换了群晖,又升级到了 3.0 。但是原始的那个 github 则是停在了几年前没动过。所以希望你还能继续维护下去。