bitwarden本地搭建(無需購買SSL證書)

THATO發表於2024-07-19

bitwarden本地搭建(無需購買SSL證書)

在安裝之前,筆者在這裡先宣告一下,我安裝bitwarden使用的操作環境為ArchLinux,我的想法是,因為這只是一個“密碼本”,並且最好能保證其能夠在開機後佔用儘量少的記憶體讓密碼本保持穩定執行。在此前提下,我選擇了乾淨整潔的ArchLinux,關於其安裝,大家可以看一下網上現有的教程,或者也可以看一下我的另一篇文章,https://www.cnblogs.com/Thato/articles/18309473

Arch的安裝不能說簡單,但是也絕對說不上很難。關於完全安裝完畢後的佔用,我壓到了350MB的執行記憶體佔用,如下圖,可以說是佔用十分的少了

如果你不喜歡用或者不用Arch,也沒有關係,本篇文章主要的分享目的是自籤SSL證書使用https服務的流程,因為bitwarden強制要求執行在此環境下以保證密碼安全,而自籤既能剩下一筆資金,也能保證我們能夠使用安全的bitwarden服務

那麼接下來,是我們安裝bitwarden要用到的軟體

  • VMware虛擬機器
  • Arch Linux作業系統
  • docker
  • docker compose
  • Nginx => 用於反向代理和載入ssl證書
  • 一個能用的代理 => 主要是拉docker映象用,如果你有好的映象源,其實這個就無所謂
  • 一個清醒的大腦
  • 一杯茶或者咖啡

docker與docker-compose的安裝

安裝docker

docker的安裝我們可以直接使用

pacman -S docker

來安裝,如下:

此時按下回車確認安裝即可;當安裝完畢後,我們可以再使用命令開啟docker的守護程序並且設定開機自啟

systemctl enable --now docker

當出現如上提示時,docker就啟動完畢且新增開機自啟了;檢查一下docker服務是否正常,執行命令

docker version

當docker如上顯示出Client和Server的資訊後,說明docker安裝設定完畢。

安裝docker-compose

對於Arch來說,docker-compose可以直接使用pacman來安裝,執行命令

pacman -S docker-compose

安裝完成後執行命令

docker-compose version

當能夠成功返回版本資訊時,說明docker-compose也安裝完畢了

bitwarden的安裝

我這裡使用了一個第三方的bitwarden的docker映象,聽別人說有解鎖一些專業版的東西,這裡就拿來用了。

加速docker下載

由於各種各樣的原因,我們直接使用官方拉取映象的時候多半情況不是很慢就是連線不上,為了解決這個問題,我這裡給出一個可行的解決方案:呼叫物理機的代理程式

草圖大致如上,我的天,好醜,哈哈哈哈。將就看一下,大致就是這個意思。

那麼我們如何實現呢?

首先找到代理程式上關於“允許區域網連線”的選項,這裡給出小貓和小V的示意圖,大家可以任選一個軟體去用,當然,有自己的用自己的也行,只要允許區域網連線即可。

隨後記住埠號,這裡我就用小貓了,記住埠號7890

之後開啟VM,和控制皮膚,結合看一下NAT模式的網路卡地址

可以看到我這裡是192.168.131.1,那麼結合剛才的埠號和網路卡的地址。我們要訪問的代理地址就是192.168.131.1:7890;訪問192.168.131.1:7890即可對映到物理機的7890埠使用代理,這裡各位根據自己的實際情況去更改即可。

拿到代理地址之後,配置docker,使其走代理,依次執行命令

mkdir -p /etc/systemd/system/docker.service.d
touch /etc/systemd/system/docker.service.d/http-proxy.conf
vim /etc/systemd/system/docker.service.d/http-proxy.conf

在vim編輯的檔案中新增如下條目

[Service]
Environment="HTTP_PROXY=http://192.168.131.1:7890/"
Environment="HTTPS_PROXY=http:// 192.168.131.1:7890/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

儲存後重啟docker

systemctl daemon-reload
systemctl restart docker

此時docker加速就配置完成了,接下來我們來拉取映象

拉取映象&建立例項

執行命令

docker pull bitwardenrs/server:latest

拉取大佬用rust寫好的bitwarden docker映象

可以看到主機側代理成功獲取到了請求,並且docker已經開始使用主機側代理拉取映象了,此時我們等待映象拉取完畢即可,映象拉取過程的速度因網路狀態而異。

當出現如上提示資訊時,說明成功拉取完畢了映象。隨後我們來起一下容器,執行命令

docker run -d --name bitwarden -v /bw-data/:/data/ -p 8080:80 -e WEBSOCKET_ENABLED=true -p 3012:3012 -e DOMAIN=https://passwordserver.com bitwardenrs/server:latest

當出現如上提示時,我們的容器就啟動完成了,使用命令

docker ps -a

看一下建立好的容器

如上,如果STATUS欄中如果顯示Up xxxx seconds (health: starting)或者是Up xxx miniuts (health: starting)之類的時間資訊,就沒有問題。

//我之前使用CentOS 7安裝,容器一啟動STATUS狀態就會秒Exit,有解決的同志們可以踹我一腳,我學習一下,感謝。

簡單檢查(此時bitwarden服務不可用,只是檢查是否能夠正常訪問)

注意:此時bitwarden服務並不可用,只是檢查是否能夠正常訪問

隨後我們去訪問一下web頁面,看看是否有異常;訪問之前需要知道我們的虛擬機器ip地址。這裡可以安裝一個net-tools,執行命令

pacman -S net-tools #當然,你也可以使用ip a命令來檢視ip地址

安裝完成之後就可以使用ifconfig了,我們使用ifconfig來看一下ip地址

可以看到我的ip地址是192.168.131.151,並且啟容器的時候我們是把docker的80埠對映到了Arch的8080埠上,所以這裡我們要訪問的地址就是

http://192.168.131.151:8080

嘗試訪問

可以發現我們的bitwarden服務已經搭出來了

但是,請注意!正如我本小節開頭所說,此時服務並不可用,因為bitwarden要求強制使用https才能夠進行操作,如下

很多同志可能就是卡在這一步了,上網搜尋SSL證書的獲取,大都是關於“先註冊域名然後就可以免費申請一個SSL證書”之類的回答;但是註冊域名也不是免費的,為了解決這個問題,我們可以自籤一個SSL證書出來,隨後就可以使用bitwarden的服務了。

關於自籤SSL證書,你必須要知道的幾點:

1. 完全免費,證書時長完全自定義

2. 完全能夠保證bitwarden可用,即自簽證書能夠執行https服務

3. 自簽證書不屬於“受信證書”,如果你是公網服務,請老老實實註冊域名使用受信證書

4. 瀏覽器會報一個警告,由於不是受信證書,但是我們服務可用就行了,這個不用管;所謂的“不安全”並不是你的密碼不安全,web資訊傳輸過程中是會加密的,如下圖,我使用自己已經搭建好的另一臺bitwarden密碼伺服器做示例

可以看到資料都是經過TLS加密的,而瀏覽器提示不安全僅僅是因為你的證書是自籤而不是經過權威機構認證的證書,關於安全性這點,請放心。

生成自簽證書

這裡我們需要兩個軟體,一個是openssl,一個是jdk11,使用如下命令安裝

pacman -S openssl


這裡你可以休息一下,喝杯茶或者咖啡,起身運動一下,眺望一下遠處,等到下載完畢後再繼續安裝操作
*
*
*
*
*
*
*
*
*
*
*
休息和安裝完畢了嗎?我們繼續


安裝完畢後,我們來繼續操作(自簽證書的生成參考了文章:https://cloud.tencent.com/developer/article/1558378)

首先來生成一個RSA私鑰檔案,使用命令:

openssl genrsa -des3 -out server.pass.key 2048

執行之後會要求輸入一個密碼,這裡輸入一下,會有一次密碼輸入和一次密碼驗證。

此密碼後續操作中會多次用到,請記好,如果不慎遺忘,請從這步開始重新生成私鑰

私鑰生成完畢後,我們需要將其中的密碼資訊去除,讓檔案中不包含明文密碼,執行命令

openssl rsa -in server.pass.key -out server.key

此過程中會讓我們輸入一次密碼,就是剛才的密碼,生成的無密碼私鑰為server.key

無密碼私鑰建立完畢之後,我們來生成一個CSR(證書籤名請求),執行如下命令

openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Hello/L=Guys/O=Like/OU=AndSubscribe/CN=Me.Thank.you.com"

其中,/C=xxx表示的是國家,這裡/C=CN即國家是CN;/ST表示省份;/L表示城市;/O表示組織或企業;/OU表示部門;/CN表示域名或IP。這些內容可以完全自定義,些什麼都可以,注意不要使用特殊字元

可以看到生成了server.csr,隨後我們繼續操作,開始自簽名操作,執行命令

openssl x509 -req -days 36500 -in server.csr -signkey server.key -out server.crt

其中比較重要的引數是days,這個是證書的有效時間,這裡我們既然是自簽證書,可以狠心一點,直接籤個100年的出來。

可以看到成功輸出了crt,自簽完成。隨後我們把這個證書放到ssl目錄中,依次執行如下命令

mkdir -p /usr/local/ssl
cp server.key /usr/local/ssl/
cp server.crt /usr/local/ssl/

移動完成之後我們來繼續操作,配置Nginx

使用Nginx反向代理配置https

現在我們有了證書了,該如何使用呢?難不成進到容器裡面替換嗎

其實完全不用,我們只要配置Nginx設定反向代理即可

首先來安裝Nginx,使用命令

pacman -S nginx

安裝完畢後執行如下命令

systemctl enable --now nginx

此處我們Nginx就配置完成了,隨後我們來設定反向代理

修改配置檔案/etc/nginx/nginx.conf,執行命令

vim /etc/nginx/nginx.conf

在其中修改如下內容(注意,一定要在規定的地方去改)

在http中新增:

	types_hash_max_size 4096;

將sever中的內容修改為(Server中error_page上面相關的引數項全部移除即可):

	listen 80;
	server_name passwordsever.com;
	# Allow large attachments
	client_max_body_size 128M;
	location / {
		proxy_pass http://localhost:8080;
		proxy_set_header Host \$host;
		proxy_set_header X-Real-IP \$remote_addr;
		proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto \$scheme;
		}
	location /notifications/hub {
		proxy_pass http://localhost:3012;
		proxy_set_header Upgrade \$http_upgrade;
		proxy_set_header Connection "upgrade";
		}
	location /notifications/hub/negotiate {
		proxy_pass http://localhost:8080;
		}

	listen 443 ssl;
	ssl_certificate /usr/local/ssl/server.crt;
	ssl_certificate_key /usr/local/ssl/server.key;

配置完成之後儲存檔案,隨後依次執行下面的命令

nginx -t
nginx -c /etc/nginx/nginx.conf
nginx -s reload

此時就配置完成了

正式訪問bitwarden

我們來試試訪問我們的bitwarden,此時我們已經配置好了https,此時訪問https://xxx.xxx.xxx.xxx(你的伺服器ip地址)即可

瀏覽器爆如上錯誤直接繼續訪問,此處的“不安全”原因上面已經強調過,不再贅述

可以看到此時成功進入網頁了,那麼我們開始使用吧。

建立一個新賬戶,點選建立賬號

這裡根據提示填寫即可,主密碼就是登入進bitwarden的密碼,請一定牢記賬號和密碼

註冊完畢即可登入

此時,你的bitwarden就搭建完畢了,關於bitwarden的使用,大家可以自行探索。

恭喜你走到了這一步!

相關文章