WebDAV服務器搭建

-------------------- 2023.3.30~2023.4.1將全部內容更新 ?-------------------------------
之前發(fā)布時的文章比較零亂,不夠簡潔...
目錄
1.WebDAV服務器搭建
2.搭建目的
3.說明
4.使用HTTPS協(xié)議
4.1 HTTPS單向認證
????4.1.1 ?Nginx
????????4.1.1.1推薦指數(shù):★★★★★☆
????????4.1.1.2 使用感受
????????4.1.1.3. 思路方法
????????4.1.1.4 腳本搭建WebDAV(推薦)
????????4.1.1.5. 學習使用
????????????4.1.1.5.1 第1步:生成一個自簽名的數(shù)字證書
????????????4.1.1.5.2 第2步:安裝Nginx并配置WebDAV模塊
????????????4.1.1.5.3 第3步:增強安全性及相關設置
???????4.1.1.6 開放安全規(guī)則,入方向: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 推薦指數(shù):★★★★★☆
4.2.HTTPS 雙向認證
4.2.1. 推薦指數(shù):★★★★★★
4.2.2 目的
4.2.3. Joplin、Obsidian 不支持雙向認證
5.視頻教程
1.WebDAV服務器搭建
搭建的初衷是為了同步Joplin筆記(https://joplinapp.org/),后來發(fā)現(xiàn)其實也可以同步Obsidian筆記(https://obsidian.md/)雖然同步功能沒有Joplin友好。前者是軟件自帶WebDAV同步方式,后者是使用WebDAV同步插件
2.搭建目的
用于筆記等數(shù)據(jù)的實時同步
筆記同步三件套:WebDAV客戶端 ?+ WebDAV服務端 + 服務器
WebDAV客戶端:可以是Joplin(https://joplinapp.org/),也可以是Obsidian(https://obsidian.md/),或者其它支持WebDAV同步的軟件
WebDAV服務端(Nginx或者WebDAV-go ):搭建在服務器中,如云服務器
服務器:筆記等數(shù)據(jù)存放的地方,可以隨時隨地使用任何的WebDAV客戶端同步數(shù)據(jù)
ps: 關于服務器的選擇,這里將使用云服務器
3.說明
1.本篇文章需要一點Linux基礎,如果有不明白的地方,歡迎到評論區(qū)留言
2.需要使用到ssh終端登錄服務器(SecureCRT、Finalshell等等都是可以的)
3.本篇文章中列出的代碼的使用方式:
將列出的代碼全部復制(快捷鍵:ctrl+insert),并粘貼到ssh終端(快捷鍵:shift+insert),最后回車,其中某些步驟需要多次回車(總之,粘貼后多按幾次回車即可)
4.云服務器的安全組記得開放指定端口?。?! 另外服務器中莫忘記開放指定端口(為了省事,可直接關閉服務器中的防火墻)
4.使用HTTPS協(xié)議
如果使用的是HTTP協(xié)議,這意味著我們的筆記數(shù)據(jù),完全luolu地在網(wǎng)上跑來跑去……,筆記數(shù)據(jù)容易被壞人監(jiān)聽,所以這里推薦使用HTTPS協(xié)議傳輸數(shù)據(jù)
下面有2種HTTPS認證方式:單向認證和雙向認證。但目前Joplin、Obsidian筆記軟件均不支持雙向認證,所以為了方便,推薦使用HTTPS單向認證
4.1 HTTPS單向認證
下面展示了兩種方式,一種是由Nginx編譯安裝搭建的WebDAV服務器,另一種是Github上由Go語言編寫的WebDAV-go項目。當然這兩者都已經(jīng)腳本化,只為方便搭建,使用其中一種就行。
4.1.1 ?Nginx
4.1.1.1推薦指數(shù):★★★★★☆
4.1.1.2 使用感受
如今,由于考慮到Nginx的泛用性,我已經(jīng)將其作為WebDAV服務器使用了,通過它同步Joplin筆記已經(jīng)1年多,是比較穩(wěn)定的
4.1.1.3. 思路方法
為了筆記傳輸過程中更安全,就需要使用HTTPS,而最麻煩的是SSL數(shù)字證書問題,這個問題如果解決了,其他的問題也就不算問題
方法:
首先需要我們有一個SSL數(shù)字證書,可以自己購買,但是無奈價格昂貴,但可以使用開源軟件mkcert幫助我們生成一個自簽名的數(shù)字證書(它比openssl方便許多)
安裝Nginx,配置WebDAV模塊,使Nginx能夠通過WebDAV傳輸數(shù)據(jù),然后配置相關安全設置進一步加強安全性
設置服務器安全組,開放Nginx監(jiān)聽的https默認端口443(但不一定非要443,我們可以改為2022,2023,...都行)。并且關閉服務器防火墻(服務器中也可以開放指定端口,如443,80等任意的端口)
同步效果展示
4.1.1.4 腳本搭建WebDAV(推薦)
復制下面代碼,粘貼到終端,然后回車
輸入Nginx監(jiān)聽的HTTP端口,然后回車(默認80端口)
輸入Nginx監(jiān)聽的HTTPS端口,然后回車(默認443端口)

注:main.sh這個shell文件有提供多種功能

腳本v2.1版本:支持Ubuntu、Debian、CentOS系統(tǒng)
經(jīng)過測試的系統(tǒng)版本:
ubuntu22.04、 ubuntu20.04、ubuntu18.04、ubuntu16.04
Debian11.1、Debian10.0、Debian9.0
CentOS7.9、CentOS7.2
4.1.1.5. 學習使用
下面是詳細步驟,供學習交流,以CentOS為例,其他Linux系統(tǒng)同理操作即可
ps: 由于文本格式,像空格,tab符及特殊符號等、以及這篇文章發(fā)布的平臺本身等等原因,有一定的概率會出錯,所以,推薦使用給出的shell腳本執(zhí)行(見4.1.1.4),而手動部分展示出來是為了供學習使用和參考。
4.1.1.5.1 第1步:生成一個自簽名的數(shù)字證書
方式1:手動執(zhí)行
開源軟件mkcert(go語言編寫的程序)是一個用于制作本地信任的開發(fā)證書的簡單工具
下載:https://github.com/FiloSottile/mkcert/releases
https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64
方式2:自動執(zhí)行,為ip地址生成自簽名數(shù)字證書。
4.1.1.5.2 第2步:安裝Nginx并配置WebDAV模塊
4.1.1.5.3 第3步:增強安全性及相關設置
1.相關安全性增強配置:
1.1.HTTPS 密鑰交換算法
執(zhí)行下面指令生成DH 參數(shù)文件:(執(zhí)行需半分鐘左右)
1.2HTTPS 會話緩存
說明:之后將會為nginx配置會話憑證(Session Ticket)方式
執(zhí)行下面指令生成會話憑證密鑰文件:
2.配置筆記數(shù)據(jù)存放目錄
3.配置用于登錄認證的密碼文件
說明:執(zhí)行下面指令,記住生成的WebDAV用戶名和密碼,如果忘記了,再次執(zhí)行即可
4.修改Nginx配置文件
4.1.將mkcert生成證書和私鑰移動到Nginx配置目錄
4.2.修改配置文件(注:此處有一百余行)
注意:此塊內容除了EOF所在行,其余不要用Tab符,如果有,請?zhí)鎿Q為空格,否則重定向無法正確輸出
(有的$需要保留,所以使用了轉義符反斜杠)
4.1.1.6 開放安全規(guī)則,入方向:443端口。關閉防火墻
以阿里云為例,入方向:開放您設置的https的端口(您設置的https的端口,并非一定是443,不過是默認情況下是443),并在ssh終端輸入下面指令關閉服務器防火墻(也并非一定要關閉,您也可開放這個端口):
下面,以開啟443端口為例:

方式1:關閉防火墻
方式2:開放443端口
####
下面以Joplin和Obsidian這兩款筆記軟件為例,它們都支持WebDAV同步,可以很好作為同步測試對象
4.1.1.6.1 Joplin客戶端WebDAV同步設置
將根證書從服務器中下載到Windows中,然后配置證書到Joplin客戶端
演示中的Joplin版本:2.9.17
1.下載根證書
執(zhí)行下面指令下載根證書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端同樣需要安裝證書
安卓端安裝證書:設置——>隱私安全——系統(tǒng)安全——加密與憑據(jù)——從SD卡安裝證書即可
ios端安裝證書:
將證書文件通過郵件發(fā)送到一個郵箱,然后用safari瀏覽器登錄這個這個網(wǎng)頁郵箱,然后找到這個郵件,并將其中的附件(也就是證書)下載下來(會提示是不可描述文件)
然后進入設置——>通用——>描述文件——>選擇這個證書文件,然后安裝
繼續(xù)進入設置——>通用——>關于本機——>證書信任設置——>開啟【針對根證書啟用完全信任】的開關
Joplin同步效果展示



安卓端

4.1.1.6.2 Obsidian客戶端WebDAV同步設置
1.首先下載根證書,并導入證書到本地計算機中,避免同步時400錯誤(原因:由于自簽名證書
400錯誤:
https://github.com/remotely-save/remotely-save/issues/79





以當前用戶為例,點擊【下一步】




點【是】

3.先重啟obsidian軟件,然后打開如remotely-save插件,填寫WebDAV 同步信息

3.點擊檢查測試是否同步成功

4.1.2. webdav-go
4.1.2.1 推薦指數(shù):★★★★★☆
webdav-go似乎不需要過多的環(huán)境依賴,由Golang語言編寫,不像Nginx編譯安裝需要較為復雜的環(huán)境
此項目github上有1.7W星星,穩(wěn)定性感覺還是不錯的
二進制文件:https://github.com/hacdias/webdav/releases
安裝過程:待更新...
4.2.HTTPS 雙向認證
4.2.1. 推薦指數(shù):★★★★★★
4.2.2 目的
在單向認證的基礎上進一步加強安全性,比如網(wǎng)銀就采用了該方式,簡單的說就是客戶端和服務器端都需要驗證彼此的身份,它可以防止中間人對數(shù)據(jù)的監(jiān)聽和篡改。
4.2.3. Joplin、Obsidian 不支持雙向認證
Joplin錯誤信息:
發(fā)生錯誤。請檢查 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".
(譯:證書只是用來驗證服務器證書的,并不會將它發(fā)送給服務器)
資料來源:
所以,目前無法實現(xiàn)雙向認證
這個問題先留著,如果官方提供解決方案了,再來更新這塊內容...
5.視頻教程
https://www.bilibili.com/video/BV1ie4y157yz/?vd_source=b64c0f67d52589e036d7ed622dff19bc