欢迎光临散文网 会员登陆 & 注册

WebDAV服务器搭建

2022-07-23 22:22 作者:庄生梦蝶是逍遥  | 我要投稿

-------------------- 2023.3.30~2023.4.1将全部内容更新  -------------------------------

之前发布时的文章比较零乱,不够简洁...


目录

1.WebDAV服务器搭建

2.搭建目的

3.说明

4.使用HTTPS协议

4.1 HTTPS单向认证

    4.1.1  Nginx

        4.1.1.1推荐指数:★★★★★☆

        4.1.1.2 使用感受

        4.1.1.3. 思路方法

        4.1.1.4 脚本搭建WebDAV(推荐)

        4.1.1.5. 学习使用

            4.1.1.5.1 第1步:生成一个自签名的数字证书

            4.1.1.5.2 第2步:安装Nginx并配置WebDAV模块

            4.1.1.5.3 第3步:增强安全性及相关设置

       4.1.1.6 开放安全规则,入方向:443端口。关闭防火墙

        4.1.1.7.WebDAV同步设置

            4.1.1.7.1 Joplin客户端WebDAV同步设置

            注意

            Joplin安卓和ios端同样需要安装证书Joplin同步效果展示

            4.1.1.7.2 Obsidian客户端WebDAV同步设置

    4.1.2. webdav-go

    4.1.2.1 推荐指数:★★★★★☆

4.2.HTTPS 双向认证

4.2.1. 推荐指数:★★★★★★

4.2.2 目的

4.2.3. Joplin、Obsidian 不支持双向认证

5.视频教程


1.WebDAV服务器搭建

搭建的初衷是为了同步Joplin笔记(https://joplinapp.org/),后来发现其实也可以同步Obsidian笔记(https://obsidian.md/)虽然同步功能没有Joplin友好。前者是软件自带WebDAV同步方式,后者是使用WebDAV同步插件


2.搭建目的

用于笔记等数据的实时同步

笔记同步三件套:WebDAV客户端  + WebDAV服务端 + 服务器

  • WebDAV客户端:可以是Joplin(https://joplinapp.org/),也可以是Obsidian(https://obsidian.md/),或者其它支持WebDAV同步的软件

  • WebDAV服务端Nginx或者WebDAV-go ):搭建在服务器中,如云服务器

  • 服务器:笔记等数据存放的地方,可以随时随地使用任何的WebDAV客户端同步数据

ps: 关于服务器的选择,这里将使用云服务器


3.说明

1.本篇文章需要一点Linux基础,如果有不明白的地方,欢迎到评论区留言

2.需要使用到ssh终端登录服务器(SecureCRT、Finalshell等等都是可以的)

3.本篇文章中列出的代码的使用方式:

将列出的代码全部复制(快捷键:ctrl+insert),并粘贴到ssh终端(快捷键:shift+insert),最后回车,其中某些步骤需要多次回车(总之,粘贴后多按几次回车即可)

4.云服务器的安全组记得开放指定端口!!! 另外服务器中莫忘记开放指定端口(为了省事,可直接关闭服务器中的防火墙)


4.使用HTTPS协议

如果使用的是HTTP协议,这意味着我们的笔记数据,完全luolu地在网上跑来跑去……,笔记数据容易被坏人监听,所以这里推荐使用HTTPS协议传输数据


下面有2种HTTPS认证方式:单向认证和双向认证。但目前Joplin、Obsidian笔记软件均不支持双向认证,所以为了方便,推荐使用HTTPS单向认证

4.1 HTTPS单向认证

下面展示了两种方式,一种是由Nginx编译安装搭建的WebDAV服务器,另一种是Github上由Go语言编写的WebDAV-go项目。当然这两者都已经脚本化,只为方便搭建,使用其中一种就行。


4.1.1  Nginx

4.1.1.1推荐指数:★★★★★☆

4.1.1.2 使用感受

如今,由于考虑到Nginx的泛用性,我已经将其作为WebDAV服务器使用了,通过它同步Joplin笔记已经1年多,是比较稳定的


4.1.1.3. 思路方法

为了笔记传输过程中更安全,就需要使用HTTPS,而最麻烦的是SSL数字证书问题,这个问题如果解决了,其他的问题也就不算问题


方法:

  1. 首先需要我们有一个SSL数字证书,可以自己购买,但是无奈价格昂贵,但可以使用开源软件mkcert帮助我们生成一个自签名的数字证书(它比openssl方便许多)

  2. 安装Nginx,配置WebDAV模块,使Nginx能够通过WebDAV传输数据,然后配置相关安全设置进一步加强安全性

  3. 设置服务器安全组,开放Nginx监听的https默认端口443(但不一定非要443,我们可以改为2022,2023,...都行)。并且关闭服务器防火墙(服务器中也可以开放指定端口,如443,80等任意的端口)

  4. 为Joplin、Obsidian等客户端配置WebDAV同步设置,包括配置证书

  5. 同步效果展示

4.1.1.4 脚本搭建WebDAV(推荐)

  • 复制下面代码,粘贴到终端,然后回车

  • 选择证书生成方式,然后回车(默认根据IP生成)

  • 输入Nginx监听的HTTP端口,然后回车(默认80端口)

  • 输入Nginx监听的HTTPS端口,然后回车(默认443端口)

  • 运行片刻,将自动把证书下载到电脑,需要手动选择下载位置

注:main.sh这个shell文件有提供多种功能

脚本v2.1版本:支持Ubuntu、Debian、CentOS系统

经过测试的系统版本:

ubuntu22.04、 ubuntu20.04、ubuntu18.04、ubuntu16.04

Debian11.1、Debian10.0、Debian9.0

CentOS7.9、CentOS7.2


4.1.1.5. 学习使用

下面是详细步骤,供学习交流,以CentOS为例,其他Linux系统同理操作即可

ps: 由于文本格式,像空格,tab符及特殊符号等、以及这篇文章发布的平台本身等等原因,有一定的概率会出错,所以,推荐使用给出的shell脚本执行(见4.1.1.4),而手动部分展示出来是为了供学习使用和参考


4.1.1.5.1 第1步:生成一个自签名的数字证书

方式1:手动执行

开源软件mkcert(go语言编写的程序)是一个用于制作本地信任的开发证书的简单工具

下载:https://github.com/FiloSottile/mkcert/releases

https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64

方式2:自动执行,为ip地址生成自签名数字证书。


4.1.1.5.2 第2步:安装Nginx并配置WebDAV模块

4.1.1.5.3 第3步:增强安全性及相关设置

1.相关安全性增强配置:

1.1.HTTPS 密钥交换算法

说明:为Nginx配置ECDH椭圆曲线算法prime256v1

执行下面指令生成DH 参数文件:(执行需半分钟左右)

1.2HTTPS 会话缓存

说明:之后将会为nginx配置会话凭证(Session Ticket)方式

执行下面指令生成会话凭证密钥文件:

2.配置笔记数据存放目录


3.配置用于登录认证的密码文件

说明:执行下面指令,记住生成的WebDAV用户名和密码,如果忘记了,再次执行即可

4.修改Nginx配置文件

4.1.将mkcert生成证书和私钥移动到Nginx配置目录

4.2.修改配置文件(注:此处有一百余行)

注意:此块内容除了EOF所在行,其余不要用Tab符,如果有,请替换为空格,否则重定向无法正确输出

(有的$需要保留,所以使用了转义符反斜杠)

4.1.1.6 开放安全规则,入方向:443端口。关闭防火墙


以阿里云为例,入方向:开放您设置的https的端口(您设置的https的端口,并非一定是443,不过是默认情况下是443),并在ssh终端输入下面指令关闭服务器防火墙(也并非一定要关闭,您也可开放这个端口):

下面,以开启443端口为例:


方式1:关闭防火墙


方式2:开放443端口


#### 4.1.1.6.WebDAV同步设置

下面以Joplin和Obsidian这两款笔记软件为例,它们都支持WebDAV同步,可以很好作为同步测试对象


4.1.1.6.1 Joplin客户端WebDAV同步设置

将根证书从服务器中下载到Windows中,然后配置证书到Joplin客户端

演示中的Joplin版本:2.9.17

1.下载根证书

执行下面指令下载根证书rootCA.pem,在弹出的对话框中选择存放的目录,比如我将它下载到N盘根目录

2.给Joplin客户端配置 TLS 证书

配置方法:

打开Windows版本的Joplin:依次点击工具——选项——同步,然后选择同步目标WebDAV

接着点击【显示高级设置】,然后鼠标往下滑动,找到TLS证书字样。接着看下面配置方式


 方式1:配置证书文件的全路径。比如我将下载的证书复制到N盘的cert目录,那么配置TLS路径

为N:\cert\rootCA.pem


 方式2:配置证书文件所在目录,比如我将证书放到N盘的cert目录,那么配置TLS证书路径为  N:\cert




3.填写WebURL、WebURL用户名、WebURL密码

WebURL格式:https://【域名或IP】:【设置的https端口】/dav

如:https://125.26.53.206:2022/dav

接着点击【应用】,然后点击【检查同步设置】(查 看配置是否成功)



注意

证书文件所在路径中不能有中文和空格!

检查同步设置可能会有以下报错:

1.401:说明WebDAV配置信息有误

2.unable to verify the first certificate :说明证书配置有误

值得说明的是,由于Joplin对证书的检验方式、以及其他等等原因,我们的配置的根证书存在小概率报错(原因未知)。

   解决的方式如下几种:

  • 更改证书存放路径,重新配置TLS证书,然后必须重启Joplin。这是为了解决该软件不能及时更新修改的配置信息等原因,体验不是太好,希望以后能修复吧

  • 在Joplin软件中忽略TLS证书错误,然后重启Joplin,不过这会丢失些安全性。

Joplin安卓和ios端同样需要安装证书

安卓端安装证书:设置——>隐私安全——系统安全——加密与凭据——从SD卡安装证书即可

ios端安装证书:

  1. 将证书文件通过邮件发送到一个邮箱,然后用safari浏览器登录这个这个网页邮箱,然后找到这个邮件,并将其中的附件(也就是证书)下载下来(会提示是不可描述文件)

  2. 然后进入设置——>通用——>描述文件——>选择这个证书文件,然后安装

  3. 继续进入设置——>通用——>关于本机——>证书信任设置——>开启【针对根证书启用完全信任】的开关


Joplin同步效果展示

PC端


安卓端

4.1.1.6.2 Obsidian客户端WebDAV同步设置

1.首先下载根证书,并导入证书到本地计算机中,避免同步时400错误(原因:由于自签名证书

400错误:

https://github.com/remotely-save/remotely-save/issues/79

本插件处理 https 是完全交由 electron 处理的。请试一下用电脑原生的 chrome 浏览器看看是否有相同错误?此外可以查一下是不是 ssl 证书设置有问题?

以当前用户为例,点击【下一步】



点【是】

3.先重启obsidian软件,然后打开如remotely-save插件,填写WebDAV 同步信息


3.点击检查测试是否同步成功


4.1.2. webdav-go

4.1.2.1 推荐指数:★★★★★☆

webdav-go似乎不需要过多的环境依赖,由Golang语言编写,不像Nginx编译安装需要较为复杂的环境

此项目github上有1.7W星星,稳定性感觉还是不错的

二进制文件:https://github.com/hacdias/webdav/releases

安装过程:待更新...


4.2.HTTPS 双向认证

4.2.1. 推荐指数:★★★★★★

4.2.2 目的

在单向认证的基础上进一步加强安全性,比如网银就采用了该方式,简单的说就是客户端和服务器端都需要验证彼此的身份,它可以防止中间人对数据的监听和篡改。


4.2.3. Joplin、Obsidian 不支持双向认证

理论上是可以进行双向认证的,并且使用了curl测试通过了https的双向认证、chrome浏览器也通过认证


Joplin错误信息:

发生错误。请检查 URL、用户名、密码等是否正确以及同步目标是否可访问。报告的错误为:

PROPFIND : Unknown error 2 (400): <html> <head><title>400 No required SSL certificate was sent</title></head> <body> <center><h1>400 Bad Request</h1></center> <center>No required SSL certificate was sent</center> <hr><center>nginx</center> </body> </html> (Code 400)


查了下资料:"Joplin does not use certificates for authentication. The certificate to specify is for certificate verification of the Server".

(译:证书只是用来验证服务器证书的,并不会将它发送给服务器)

资料来源:https://discourse.joplinapp.org/t/can-joplin-send-an-x509-certificate/14369

所以,目前无法实现双向认证

这个问题先留着,如果官方提供解决方案了,再来更新这块内容...


5.视频教程

https://www.bilibili.com/video/BV1ie4y157yz/?vd_source=b64c0f67d52589e036d7ed622dff19bc

WebDAV服务器搭建的评论 (共 条)

分享到微博请遵守国家法律