群晖在国内无法使用自带的证书管理程序自动申请和续签证书,因此往往需要一些额外的方式。当前最为主流的替代方法是使用最为流行的acme.sh管理证书。
之前国内的教程都倾向于以类似传统linux服务器中的acme.sh安装和配置方法管理证书。但是acme.sh官方其实为群晖系统进行了适配,其可以使用一个hook调动群晖自身的证书管理系统安装证书。
对应的安装指导在如下链接:Synology NAS 指南 ·acmesh-official/acme.sh 维基,结合我自己的安装实践和踩坑教训,对其进行翻译。
群晖安装acme.sh自动管理ECC泛域名证书
这里以虚拟域名千度(现场编一个) qiandu.com
为例,为其申请泛域名证书,并且使用ecc证书
参考官方 Synology NAS 指南 ·acmesh-official/acme.sh 维基
1 登录群晖
首先,在群晖 控制面板
> 终端机与SNMP
中在终端机页面启动SSH功能。
然后,使用SSH工具登录群晖的管理员账户,我这里使用的是xshell,你可以使用任意你喜欢的SSH工具。
2 安装 acme.sh
到 /usr/local/share/acme.sh
|
|
3 配置 DNS 环境变量
由于普通家庭网络无法使用http的80端口验证其对域名的持有权,所以这里使用DNS的方式进行验证。这里需要你去对应的DNS服务商创建一个可以添加域名记录的令牌。这个令牌在不同的服务商有不同的叫法,具体参考官方手册DNS API指南
我使用的的阿里云的DNS服务,其对应需要变量Ali_Key
和Ali_Secret
|
|
如果你使用的是其它DNS服务商,请参考官方手册DNS API指南
4 申请泛域名ECC证书
这里进入acme.sh的安装目录。使用acme.sh 的 issue
子命令向证书服务商(这里使用letsencrypt,其免费提供有效期为3个月的证书)申请一个证书。我个人喜欢ecc证书,所以下面申请ecc的泛域名证书
|
|
5 安装证书/部署证书
官方提供了几种不同的安装方法,这里使用官方最为推荐的临时管理员方式。
注意:证书描述是可选的,忽略该参数而安装的证书其证书描述为空。下面的证书续订依赖于这个证书描述,因此建议设置一个描述,且在部署完证书后千万不要在群晖控制面板中更改刚刚安装的证书的描述。证书续订过程需要根据证书描述定位并验证acme.sh安装的证书,更改证书描述会导致证书续订过程无法找到对应描述的证书而续订失败。
|
|
根据官方所述的翻译
这样,您就不需要提供任何管理员凭证,deploy sciprt 本身会利用 Synology 内置的实用程序来完成身份验证,因此它设计为仅支持本地部署,不能用于在 docker 中部署或远程部署。
6 配置证书续订
这里不要使用cronjob,建议使用群晖面板中的计划任务
要在将来自动续订证书,您需要在任务计划程序中配置任务。不建议将其设置为自定义 cronjob(如本 wiki 页面之前所述),因为 DSM 安全顾问会告诉您有关于未知 cronjob 的严重警告。
打开 控制面板
> 任务计划
,新增
> 计划的任务
> 用户自定义的脚本
,然后创建以下任务
- 常规:任务名称:
Update_defaule_cert
;用户账号:root
- 计划:设置为每周执行或者每月执行,只要小于证书有效期3个月即可
- 任务设置:使用以下命令脚本:
|
|
注意:该hook会续订通过acme.sh安装的所有证书,其通过证书描述定位由acme安装的证书。请不要在控制面板中更改证书的描述,否则acme无法通过安装时的证书描述定位对应的证书,进而导致证书续订失败。
7 修复 Synology DSM 升级后损坏的环境
当群晖进行系统升级时,会重置系统的环境变量。此时会破坏acme.sh运行所依赖的环境变量。使用以下命令在profile中添加一个修复环境变量的预执行命令
|
|
或者,或手动将以下行添加到 /root/.profile 中
|
|
完成上面的部分后,你就可以退出ssh连接了。然后在群晖控制面板里记得关闭ssh连接,并将你申请部署的新证书设置为新的默认证书
8 结束清理
完成以上配置后,请关闭群晖中的ssh功能。
参考链接
直接安装脚本
Synology NAS 指南 ·acmesh-official/acme.sh 维基
群晖配置acme自动更新群晖和服务器证书 - 任意的Blog
使用docker申请证书
群晖使用acme.sh申请并部署泛域名证书_NAS存储_什么值得买
群晖7.2.1开启二次验证用docker安装acme.sh,实现自动更新部署SSL证书_网络存储_什么值得买
群晖7.2使用ACME.SH更新SSL证书 双重认证 泛域名 DNSPOD_NAS存储_什么值得买