bitwarden本地搭建(無需購買SSL證書) 在安裝之前,筆者在這裡先聲明一下,我安裝bitwarden使用的操作環境為ArchLinux,我的想法是,因為這隻是一個“密碼本”,並且最好能保證其能夠在開機後占用儘量少的記憶體讓密碼本保持穩定運行。在此前提下,我選擇了乾凈整潔的ArchLinux,關 ...
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埠上,所以這裡我們要訪問的地址就是
嘗試訪問
可以發現我們的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的使用,大家可以自行探索。
恭喜你走到了這一步!