通过上篇教程,我们已经可以通过外网访问自己家里的nas了,下一步就可以翻着花的折腾各种想法。但是在这之前,我们要知道一个问题:http协议是明文传递数据。也就是说,如果你在外访问家中的nas的时候,直接把所有信息都暴露出去了,其中包括账号和密码。万一别人有点小想法,你的nas变成别人的后花园了。为了解决这个问题,我们需要换成https来访问,需要一个ssl证书。 群晖本身是提供一个自有证书的,不过浏览器往往不承认这个证书,在使用https访问的时候还是会提示不安全,这导致有些浏览器无法访问、有些软件直接不支持。我们需要搞一个更好的ssl证书。 但是: 1、传统方式的ssl证书是认证一个固定的域名,像我们前一篇教程中讲的多个二级域名就必须每个域名搞一个证书,太麻烦。 2、收费证书价格不菲。 3、免费证书各有各的麻烦。 显然我不想花钱买收费证书,群晖自己的证书似乎不支持泛域名,免费证书一般有各种各样的麻烦。我在网上搜教程的时候,比较了不少家免费证书,最终只能心不甘情不愿的选择了一家: Let's Encrypt 据说这家是全球最大的免费域名机构,各种优点等等等等。唯一的麻烦是三个月需要重新申请一次。好处是真的免费、支持泛域名、没有那么多弯弯绕绕。于是就折腾一番申请了一个。或许也是因为这个证书机构号称是最大的,网上确实有很多申请流程的介绍。这里我就不再重复说怎么申请了。我想仔细讲一讲怎么自动续期。 因为搜索Let's Encrypt,连带的就看到很多介绍自动续期的工具,其中讲的最多的就是acme,可以用命令行的形式自动申请、续期Let's Encrypt证书。然后在找acme教程的时候又发现了新的东西,syno-acme,据介绍,可以自动申请或者续期之后,自动更新群晖的证书设置。于是各种搜索最终找到了作者的博客: 群晖 Let's Encrypt 泛域名证书自动更新 按照博客的介绍,一步一步设置安装,然后成功的掉坑了。申请证书一切正常,但是无法重启群晖的网页服务,也无法更新证书。一边看log,一边ssh登录群晖,发现问题应该是dsm7.0改变比较大,目录啊什么的都不一样,原有的脚本自然无效了。然后尝试在博客上向作者求助,没能得到回音。等不及就四处寻找解决办法,然后跑到作者的github上找到了解决办法。 下边我们一步一步来介绍如何安装syno-acme来自动更新ssl: 一、找到作者的github GitHub - andyzhshg/syno-acme: 通过acme协议更新群晖HTTPS泛域名证书的自动脚本 二、点击上图红框位置链接 我浏览器装了github翻译插件,你们访问应该是鸟语。 新页面点击红框的链接。 ok,作者在这里提供了新版本,下载这个。 点击红框位置开始下载。 下载解压之后我们需要修改设置文件,就是红框这里的,随便找个过得去的文本编辑器来修改下就好。 修改如图所示几处信息就可以了。需要注意的是,如果你用的不是腾讯云,那就需要去acme的github找到对应的介绍进行修改。 然后把这个文件夹的所有文件上传到你的群晖,任意一个合适的文件夹,例如我就放在home。 打开file station,找到你上传的位置。 右键点击cert-up.sh,选择属性。 复制位置栏的文件位置,马上要用。 打开群晖控制面板-选择计划任务 新增-计划任务-用户自定义脚本就来到上图这个页面,随便起个名字,用户选root。点上已启用。 修改计划,因为这个ssl3个月需要重新申请一次,因此我们这里改成1个月运行一次。这个频率最接近。 输入自定义脚本 /volume1/nas_share/certs/syno-acme/cert-up.sh update >> /volume1/nas_share/certs/syno-acme/log.txt 2>&1 需要注意,这个脚本是在一行的,不要分成两行。修改脚本里的文件cert-up.sh的位置到你自己刚才上传的位置,也就是我们前边复制的地址。后边log.txt最好跟上传位置放在同一个目录,方便遇到麻烦了找记录。 然后确定就行了,完成这一切之后,记得邮件点击计划任务,运行一次。 需要注意的是,我是先手动申请了ssl证书,然后调用这个来自动更新,因此不确定在没有申请证书的情况下会不会自动申请并导入证书,按道理是可以自动申请的。万一没有自动导入证书,你可以手动导入证书。 在运行完计划任务之后,回到你刚才的上传目录,他会自动建立acme.sh目录,这个目录下边会生成一个以你的域名为名字的目录,点开,你的证书文件就在这个目录之下。自己导入群晖的证书就好,位置在控制面板-安全-证书。 好了,做到这里我们就可以通过https安全访问群晖了。 说明:群晖Quickconnect 的访问速度太慢,很大一批都宁愿自己淘一个低延迟且水管足够的VPS服务器配合群晖NAS来做内网穿透使用,来达到提升外网访问速度的目的。而对于一个暴露在外网的NAS来说,让后台访问支持HTTPS协议变得尤为重要。很多人会说为什么不用群晖Quickconnect 服务,使用DSM系统自带的SSL证书?毕竟 Quickconnect 访问慢啊,另外我们很多时候需要在NAS上建站或者部署安装其他的项目都需要用到泛域名证书。 Synology-SSL.png 免费的泛域名证书——Let’s Encrypt 一个就搞定,而且还有相应的开源脚本Neilpang/acme.sh 轻松便捷的签发证书,可以申请一个类似 今天的介绍的重点是:如何使用群晖SSL自动签发脚本 andyzhshg/syno-acme 为你的群晖NAS配置HTTPS泛域名证书。 1. 准备工作先打开套件中心安装Python3套件,这是重点 原作者和很多搬运工都没写 此脚本主要采用的一键替换群晖默认证书的方案,所以,为了防止意外,确保你的证书列表里只有这一条记录,即默认证书那一条。实际上因为支持了泛域名证书,基本上这一条记录就足够用了(当然,如果你要管理多个域名,可能本文的方法并不实用)。所以开始工作前你的证书列表大概应该是这个样子:synology-ssl1.png 2. 下载一键更新脚本这是一键脚本的项目地址:andyzhshg/syno-acme。 如果你对项目本身不感兴趣,可以直接下载打包好的工具:syno-acme v0.2.1。 可以通过 File Station 将下载的工具上传到NAS的任意目录下,并解压。 解压后大概是这个样子: synology-ssl2.png 3. 配置脚本参数编辑脚本的配置文件 synology-ssl3.png 如图所示,需要编辑的几个字段我用蓝框标记出来了。 首先是DOMAIN,也就是你的域名。 然后是DNS的类型,根据服务商的不同,DNS类型各不相同,比如阿里云(dns_ali),Dnspod(dns_dp),Godaddy(dns_gd)等。 最后要根据不同的服务商配置服务上提供的授权密钥等信息,比如我的域名服务商是阿里云,我需要编辑 需要指出的是,我给出的配置文件模板并没有给出所有acme.sh支持的域名服务商,大家可以参照 https://github.com/Neilpang/acme.sh/tree/master/dnsapi来添加自己的配置。一般情况下,这个页面每个文件对应一个域名服务商,比如 synology-ssl4.png
4. 配置定时任务i. 查找脚本路径在 File Station 中定位到下载的一键脚本的目录,查看该脚本的绝对路径: synology-ssl5.png synology-ssl6.png 复制完整的绝对路径到剪贴板。 ii. 创建定时任务打开 synology-ssl7.png 设置任务名称和操作用户,需要注意的是这里一定要选择 synology-ssl8.png 设置计划的时间和周期,这里只支持按月或者年重复,我们只能取按月重复才能满足 Let’s Encrypt 至少3个月更新一次的要求: synology-ssl9.png 设置执行脚本,这里我们将脚本的输出重定向到了一个 synology-ssl10.png 上图红框中的脚本命令为(注意没有换行):
具体的路径是步骤 iii. 试运行脚本可以在新建的任务上点击右键立即执行任务: synology-ssl11.png 这样脚本就会运行,自动更新证书,并重启web服务器加载新的脚本。以后,NAS会每隔一个月执行一次该脚本,自动更新证书。 iv. 回滚脚本里提供了回滚命令,可以通过ssh登录到nas,定位到对应目录,执行如下命令回滚证书目录到备份的状态:
总结这个一键脚本的特点是支持回滚操作,又最小限度的触碰系统文件,仅 |