安装Let_sEncrypt泛域名证书实现群晖NAS的免端口安全访问

通过DSM提供的反向代理服务器(Nginx),可以在公网上直接通过https协议不加端口的直接访问NAS服务器的各项服务,一来避开了家中80端口被屏蔽的囧状,二来采用SSL证书强化了NAS系统访问的安全性。虽然通过IP地址、QuickConnect或者花生壳等DDNS可以实现以上目的,但是毕竟显得不太专业,拥有自己的域名,通过域名来访问NAS是最自然的方式。现在注册一个域名并不是什么难事,费用也不是不可承受,通过CloudXNS或者DNSPOD等支持API的域名服务商,可以实现自己的域名与NAS服务器IP的动态绑定(DDNS),这部分内容并不是本文的主要内容,小白玩家可以自行搜索相关的文章来实现。拥有了自己的域名(假设为mydomain.site),实现了DDNS,下一步自然是通过反向代理服务器为各项服务配置二级域名的解析,这个过程在DSM的控制面板中的“Synology应用程序门户”中完成,首先是通过“应用程序”中的设置为各项服务启用HTTPS的端口,然后在“反向代理服务器”中配置解析的规则,例如Note Station的端口为9351,则规则中这样配置:

来源协议为:HTTPS

来源主机名为:note.mydomain.site

来源端口为:443

目的地协议为:HTTPS

目的地主机名为:localhost

目的地端口为:9351

通过这种规则,可以建立一系列的二级域名,例如:video.mydomain.site,audio.mydomain.site,drive.mydomain.site,calendar.mydomain.site等等,甚至可以通过router.mydomain.site直接指向自己的路由器的配置页面。实现了域名解析,下一步是安装SSL证书,否则在浏览器中访问这些域名时会非常尴尬的出现不安全的提示,如果你不缺钱,可以花钱去注册SSL证书,但是互联网上既然存在免费的SSL证书,作为爱折腾的NAS玩家当然要选择后者,而Lets Encrypt证书就是最适合的对象。以往为了在这么多的NAS二级域名上使用SSL证书,必须每个二级域名进行一次申请,每90天重复一次,虽然有自动化脚本,执行时等待的时间还是很长的,就在本周二的3月13日,Lets Encrypt宣布泛域名证书服务上线,终于可以不再每个域名单独申请,只要申请mydomain.site及*.mydomain.site的证书即可,操作更为简便,使用也可以更为灵活,追加或变更二级域名不再需要重新申请证书了。下面就将新的泛域名证书申请的方法进行介绍,首先是SSH登录到NAS服务器,然后获取acme.sh的代码并安装,之后就是执行acme.sh来申请证书,最后下载安装证书,由于acme.sh会通过cronjob命令来生成每日检查的任务,而群晖NAS中默认并无cronjob命令,因此必须在安装acme.sh时增加一个“--force”参数来禁止使用cronjob命令,所以虽然acme.sh提供了curl等方法直接安装,但是我还是建议使用Git克隆源码(可在Git Server套件安装后使用git命令)后安装,另外我使用了CloudXNS管理域名,acme.sh具体支持的域名服务商请参见后面的链接。

获取代码git clone 

安装脚本cd acme.sh./acme.sh --install --force

进入目录:cd ~/.acme.sh/

设置变量:export CX_Key="替换为CloudXNS的key"export CX_Secret="替换为CloudXNS的secrcet"

申请证书:./acme.sh --issue --dns dns_cx -d mydomain.site -d *.mydomain.site

备注,90天以后更新证书时的命令为:./acme.sh --renew -d mydomain.site -d *.mydomain.site

在等待120秒之后,证书就已经申请下来了,下面接着在NAS中部署证书,上一步中的证书申请时都下载到了~/.acme.sh/mydomain.site/,在DSM的File Station中找到该目录,把私钥、证书、中间证书下载到PC本地,这三个文件分别是私钥:mydomain.site.key、证书:mydomain.site.cer、中间证书:ca.cer,然后在DSM的控制面板中找到安全性,在“证书”中新建证书或替换已有证书,之后选择导入正整数,然后在私钥、证书、中间证书的选项中分别选中刚刚下载的文件,确定之后DSM会重启应用程序门户来应用新的证书。SSL证书安装好了后,可以在浏览器中用https协议免端口访问一下任意二级域名是否已经变成绿色的小锁了,另外别忘了在访问前,路由器上的443端口必须打开,否则https协议无法连接到服务器上。最后,可以自己做个HTML页面放到www.mydomain.site,把所有的外部服务放到自己的导航主页上,以后使用服务时只要访问主页并点击相应的图标即可。