QNAP 威联通如何上传自定义 SSL 证书

date
Sep 7, 2022
slug
QNAP 威联通如何上传自定义 SSL 证书
status
Published
tags
NAS
summary
通过反代的方式访问 QNAP 自己的各种服务时,小问题不断,令人烦不胜烦
type
Post

Background

需要公网通过 HTTPS 访问家中的 NAS。本来是使用 Docker 跑一个 Nginx Proxy Manager 然后反代内网地址来解决的。
这个方法访问自己 Docker 中跑的一众程序,完全没有问题,且管理非常方便,SSL 续期之类的问题交给 NPM 即可。
但可能是由于过于小众,通过这种方式访问 QNAP 自己的各种服务时,小问题不断,令人烦不胜烦。
一些战果…
一些战果…
多次跟威联通的客服沟通后还是决定不当这个免费的测试了,改成不通过反代,直接在 QTS 系统中配置 SSL 的方案。

Solution

由于我已经通过 NPM 申请了 Let's Encrypt 的泛域名 SSL 证书,为了避免麻烦,我想直接重用这个证书。
关于为什么要这么麻烦的原因还有一个。中国区的威联通不能直接页面申请 Let's Encrypt 的 SSL 证书。这个好像不是政策原因,因为据说群晖是可以的…所以可能就是要挣钱的缘故?
NPM 提供了证书的下载功能
NPM 提供了证书的下载功能
我用的 NPM 版本直接提供了证书下载的功能,可以通过网页导出。
如果页面上没有这个功能的话,也可以参考这里,直接从 Docker 中导出。
导出之后可以看到四个文件。
NPM 导出的证书
NPM 导出的证书
直接通过 NAS 页面导入是会失败的,至少我的 QTS 版本还不支持。
5.0.0.2055 版本
5.0.0.2055 版本
导入失败
导入失败
但实际上证书是没问题的,所以我们要通过 SSH 连到 NAS 上进行导入。
NAS 上证书路径是 /etc/stunnel/stunnel.pem
修改之前记得做好备份。
把需要的 pem 证书拼起来
cat fullchain6.pem privkey6.pem > stunnel.pem
然后上传到上面提到的路径覆盖原文件
重启 NAS 或直接重启相关服务

Result

这样整个流程就完成了,可以通过 HTTPS 访问一下看看是否成功。
还有个小瑕疵,通过这种方式导入的证书,管理页面上是看不到正确信息的。但不影响使用,我就不折腾了。
看不到正确的证书信息
看不到正确的证书信息
 

Update

隔一段时间手动导入一次还是太麻烦了,参考了这篇文章,使用acme.sh来自动更新。
这里大概记录一下步骤。
我是使用普通账号账号来安装acme的,在/root目录下的内容,系统重启之后都会丢失。但威联通证书保存的地方需要admin账户才能访问。所以我们cron job要用admin账户来创建。
安装之后,由于现在脚本使用ZeroSSL,需要设置账号。如果要使用Let's Encrypt这步可以省略
然后需要设置两个环境变量,参考这里。脚本会保存这些信息,所以之后执行不用再管
提前准备合并证书的自定义脚本,脚本要放在普通账户的home目录中,避免重启后丢失
执行acme脚本申请证书,这里要使用sudo权限来执行,不然访问 /etc/stunnel 有权限问题
添加cron job来定时renew cert,注意这里cron job要使用admin来添加
威联通修改crontab方法不太一样,按这个链接里的修改

Reference


© oddcc 2020 - 2024