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

来源:https://www.cnblogs.com/Thato/p/18311581
-Advertisement-
Play Games

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埠上,所以這裡我們要訪問的地址就是

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的使用,大家可以自行探索。

恭喜你走到了這一步!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 以前,我看到一個朋友在對一個系統做初始化的時候,通過一組魔幻般的按鍵,調出來一個隱藏的系統設置界面,這個界面在常規的菜單或者工具欄是看不到的,因為它是一個後臺設置的關鍵界面,不公開,同時避免常規用戶的誤操作,它是作為一個超級管理員的入口功能,這個是很不錯的思路。其實Winform做這樣的處理也是很容... ...
  • 通過WPF的按鈕、文本輸入框實現了一個簡單的SpinBox數字輸入用戶組件並可以通過數據綁定數值和步長。本文中介紹了通過Xaml代碼實現自定義組件的佈局,依賴屬性的定義和使用等知識點。 ...
  • 摘要: 使用QT進行SCSI指令操作時遇到問題,0x28讀取正常,但0x2A寫入失敗,原因是系統對0x2A命令的寫入許可權控制嚴格。解決方法是通過FSCTL_LOCK_VOLUME實現獨占訪問,實現對USB設備的寫操作。 問題參考:https://blog.csdn.net/kifea/article ...
  • 痞子衡嵌入式半月刊: 第 105 期 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回 ...
  • 一、 Linux發行版本和虛擬機介紹 Linux系統的版本分為兩種,分別是: 內核版 和 發行版。 1) .內核版 由Linus Torvalds及其團隊開發、維護 免費、開源 負責控制硬體 2).發行版 基於Linux內核版進行擴展 由各個Linux廠商開發、維護 有收費版本和免費版本 我們使用L ...
  • 寫在前面 本隨筆是非常菜的菜雞寫的。如有問題請及時提出。 可以聯繫:[email protected] GitHhub:https://github.com/WindDevil (目前啥也沒有 設計方法 瞭解了特權級機制,實際上如果要設計一個應用程式就需要保證它符合U模式的要求,不要去訪問S模式下的 ...
  • 1.字元集 在電腦科學中,信息的存儲和處理都是基於二進位數的,這是因為二進位數在電腦硬體層面上實現起來最為簡單和高效。二進位數由兩個基本元素組成:0和1,這兩個元素可以通過電子器件(如晶體管)的開關狀態來輕鬆表示。而我們在屏幕上看到的數字、英文、標點符號、漢字等字元是二進位數轉換之後的結果。按照 ...
  • ArchLinux Vmware安裝指北 在本文開始之前,首先允許我提前聲明一點,Arch Linux的安裝並不算難,但是絕對也算不上簡單,中間的安裝可能會遇到很多問題,本篇文章不能保證完全貼合你的真實機器環境,但是我會在我安裝過程中遇到的一點點小問題都說出來,給大家避個坑,這裡我安裝Arch的時候 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...