# QNAP NAS 作为 Joplin 同步后端笔记 [[https://joplinapp.org/|Joplin]]是我非常满意的一款笔记软件,入手NAS之前,在树莓派+Nextcloud上面都用的很不错。于是,入手NAS之后首先想着把Joplin的后端转移过来。 转移的过程,理论上并不复杂,无非就是首先保证所有客户端同步并且退出,然后把服务器端的数据转移好,最后更改所有客户端的远端地址,这个随便自己思考一下就可以的出来,都不用去查文档。 不过我还是碰上了两个麻烦: ## QNAP NAS 静默丢掉了上传的中间证书 执行完数据迁移之后,按教程新建了一个共享文件夹并且配置WebDAV,然后更改PC端同步地址,测试,发现报SSL错误,有关`LEAF`什么的错误,去网上搜只能发现是SSL没配置对,但灵异的是,我明明用的是以前的证书文件。 这里需要解释,由于QNAP初始化的时候,我选择了中国区,造成无法使用`Let's Encrypot`的免费证书,所以我用的办法是,把原来树莓派上的证书文件下载下来,上传到`控制台-系统-安全-证书与私钥`那里,相当于是手动配置的SSL证书。配置的过程中,有三个文件(证书、私钥、中间证书)要上传,但是中间证书那一栏标注着可选,我想着我上传的证书文件是“full_chain.pem”,也就是中间证书和证书的合并文件,我手头也没有中间证书了,所以就没有管中间证书那一栏,上传之后浏览器访问都正常,Windows自带的WebDAV客户端也没说啥,但是Joplin很挑剔这个证书。这个时候我只能怀疑是中间证书缺失的问题。 本来想着勾选上“忽略SSL错误”凑合着用就行了,但是安卓客户端更挑剔,根本就没有忽略错误的选项。于是,只能是想办法把证书完全配置好。于是从NAS上重新把证书下载回来,用文本编辑器打开,比较`full_chain.pem`文件和下载回来的证书文件的差异,发现`full_chain.pem`文件里面很明显的有两段密码,下载回来的证书文件只有一段,并且内容与`full_chain.pem`文件其中的一段完全相同。 难道所谓的证书合并,其实就是把两段文本粘在一起?尝试了一下,把`full_chain.pem`文件中多出来的那段密码单独写成一个文件,扩展名改成CRT,上传到`控制台-系统-安全-证书与私钥`那里,再访问就完全正常了。 结论:QNAP NAS 的网页服务器不认合并后的证书,合并好了传回去也会只取其中的一段,所以中间证书如果空着那就是空着了。但是,浏览器和windows系统不知道是因为缓存过,还是因为比较智能,可以自动把中间证书补上,但是Joplin没有这么智能,所以必须把三个证书都上传。 P.S. 中间证书的问题,之前也出过:[[:Website:SSL:Letsencrypt_certbot_default_operation_chain_issuse|Letsencrypt certbot命令的默认操作使得网站在Android端报证书错误的问题]] ## 悄悄损坏的Nextcloud文件 这个就纯粹是人品问题了,证书搞好了之后开始同步,结果老是在同一个文件里卡住,报错信息是一段看起来像是Nextcloud维护模式的信息。一开始以为是同步速度太快的问题,但是后来看了一下文件的内容之后,发现文件确实是损坏了。具体的说,是Nextcloud服务器端的文件完好,本地磁盘放的是损坏的(文件的前七八行被一条Nextcloud维护模式信息覆盖了),但是Nextcloud并不知道二者有差异。我迁移文件的方法是把本地磁盘上的文件上传到NAS,所以中招了。 可以合理推断,某一次Nextcloud客户端正在同步时,我搞了一次升级或者APP安装,然后服务器端返回来的错误信息就被阴差阳错当做文件写了。提了个[[https://github.com/nextcloud/desktop/issues/2307|issue]],但是目前无人跟进。 修复倒是还可以,就是把服务器端的正确文件替换进去。 但是心有余悸。如果由于某些原因,本地的错误文件又覆盖了服务器端的正确的,那就很难搞了。