Bitwarden – twój prywatny menedżer haseł
Silne hasła to niesamowicie istotna sprawa! Jest to jeden z fundamentów bezpieczeństwa w internecie. Najlepszym rozwiązaniem jest posiadanie haseł o przynajmniej 16 znakach, składającego się z małych i dużych liter, a także cyfr i znaków specjalnych. Do tego dość kluczowe jest, aby nie posiadać jednakowego hasła do każdego z serwisów, bo jak wycieknie on z jednego z nich to sprawdzenie w innych popularnych portalach to pierwsze działanie jakie wykonują oszuści/złodzieje/włamywacze. Patrząc na to wszystko nasuwa się pytanie – „jak spamiętać w głowie wszystkie te skomplikowane ciągi znaków?!”. Zapisanie ich w notatniku na komputerze też nie jest dość bezpiecznym rozwiązaniem. W takiej sytuacji na białym rumaku wjeżdża menedżer haseł i to nie byle jaki, bo konkretnie Bitwarden, którego można hostować na własnym serwerze, co też uczynimi, bo przecież nie lubimy przekazywać w posiadanie swoich danych osobom trzecim, a w szczególności jeżeli chodzi tutaj o nasze hasła.
Dlaczego akurat Bitwarden?
Pytanie słuszne, bo przecież na rynku jest wiele innych menedżerów haseł. Wymieńmy sobie te najbardziej popularne wraz z krótkim opisem, dlaczego Bitwarden jest od nich lepszy:
Nazwa | Cena (na czerwiec 2022) | Open source | Self hosted |
1Password | od $2.99 miesięcznie przy abonamencie rocznym | NIE | NIE |
Dashline | darmowy dla 1 urządzenia do 50 haseł (śmiech na sali) lub od $3.33 miesięcznie przy abonamencie rocznym | NIE | NIE |
LastPass | niegdyś darmowy, teraz tylko na jednym typie urządzeń (desktop lub mobile) lub od $2.9 miesięcznie przy abonamencie rocznym | NIE | NIE |
KeePassXC | darmowy! | TAK | Nie do końca* |
Bitwarden | darmowy! | TAK | TAK |
Jak widać pierwsze trzy menedżery są płatne, nie są otwartoźródłowe i nie da się ich hostować na własnym serwerze, więc nawet nie będziemy się nad nimi pochylać. Ciekawą opcją natomiast jest KeePassXC, który przez wielu maniaków IT jest uważany za jedyną słuszną opcję. Jego wadą jest to, że dość opornie działa na urządzeniach mobilnych, a generowana przez niego baza (jeden zaszyfrowany plik) musi być transferowana i synchronizowana pomiędzy urządzeniami przez samego użytkownika (np. poprzez NextCloud opisany w poprzednim wpisie). Jeżeli coś się zmieniło, od czasu gdy ostatnio go używałem, to proszę poprawcie mnie w komentarzach. Jak widać Bitwarden wydaje się najsensowniejszą opcją i właśnie dlatego za chwilkę go sobie zainstalujemy.
Instalacja Bitwardena
Bitwarden jest dystrybuowany między innymi również jako obraz Dockera, ale my zamiast użyć oficjalnego repozytorium skorzystamy ze zmodyfikowanej wersji o nazwie Vaultwarden, która jest odchudzona i kompatybilna z architekturą ARM, na której bazuje nasz ODROID. Z dokumentacją tego forka (tak na GitHubie nazywają się wariacje danego oprogramowania open source) możemy się zapoznać pod tym linkiem na GitHub.
W pierwszej kolejności tworzymy wolumen na pliki kontenera Vaultwarden:sudo mkdir /bw-data
Vaultwarden jest dostępny w domyślnym repozytorium Dockera, więc wystarczy, że pobierzemy go poleceniem:docker pull vaultwarden/server:latest
Tak samo jak wcześniej, gdy używaliśmy Dockera, tworzymy nowy kontener poleceniem:docker run -d \
--name bitwarden \
-e PUID=1000 \
-e PGID=1000 \
-v /bw-data/:/data/ \
-p 83:80 \
vaultwarden/server:latest
Kontener nazwaliśmy „bitwarden”, a jego port 80 przekierowaliśmy na port 83 naszego serwera. Jak zapewne pamiętacie poprzednie porty mamy już zajęte przez Webmin (81) i NextCloud (82).
Wchodzimy w przeglądarce na adres 192.168.88.7:83 i sprawdzamy czy zostanie poprawnie załadowana strona bitwardena. Niestety w takiej formie będzie się wyświetlać, ale nie będzie prawidłowo działać, co można zaobserwować próbując utworzyć nowe konto użytkownika. Otrzymamy wtedy komunikat, że jest potrzebny certyfikat HTTPS, bez którego nie możemy korzystać z naszego „skarbca” (z ang. vault). Więc na ten moment musimy zatrzymać kontener:docker stop bitwarden
A następnie go usunąć:docker rm bitwarden
Musimy utworzyć tak zwany „self signed certificate”, co można przetłumaczyć jako certyfikat z własnym podpisem, co jest wystarczające do naszego użytku. Jeżeli chcecie później udostępniać swojego Bitwardena osobom trzecim to można skorzystać z Let’s Encrypt jednocześnie podpinając pod to domenę. My wybraliśmy znacznie bezpieczniejsze rozwiązanie i stawiamy nasz skarbiec w sieci lokalnej, do której mamy dostęp poprzez tunel VPN, więc zewnętrzny certyfikat nie jest nam potrzebny.
Najpierw musimy stworzyć „Root Certificate Authority”, zwany w skrócie CA, czyli nasz prywatny „urząd” certyfikacyjny, który będzie podpisywał certyfikaty dla konkretnych domen.
Zaczynamy od utworzenia klucz CA:openssl genpkey -algorithm RSA -aes128 -out private-ca.key -outform PEM -pkeyopt rsa_keygen_bits:2048
Trzeba podać passphrase, który ma od 4 do 1024 znaków. Zapamiętaj go! W tym przypadku zagrożenie jest znikome, więc proponuję zastosować regułę KISS – z ang. „Keep It Simple Stupid”, co można przełożyć na „zrób to prosto, idioto”. Dążę do tego, że passphrase nie musi być skomplikowane, bo jak ktoś dostanie dostęp do naszej sieci lokalnej i tym samym do Bitwardena to możliwość poznania przez niego passphrase będzie naszym najmniejszym zmartwieniem. Efektem działania powyższego polecenia będzie utworzenie pliku „private-ca.key”.
Na podstawie utworzonego klucza generujemy certyfikat CA:openssl req -x509 -new -nodes -sha256 -days 3650 -key private-ca.key -out self-signed-ca-cert.crt
Po wywołaniu tego procesu musimy wpisać wcześniej podane passphrase i wypełnić krótką ankietę, w której w każdym polu można podać po prostu kropkę („.”) i zatwierdzić enterem. Jedyne co warto wypełnić to pole „Common name”, w którym należy podać nazwę naszego certyfikatu, ja podałem „odroid”. Jak widać w poleceniu podaliśmy „-days 3650” to oznacza, że nasze CA będzie miało 10-letnią datę ważności.Enter pass phrase for private-ca.key: [podaj passphrase]
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
Country Name (2 letter code) [AU]:.
State or Province Name (full name) [Some-State]:.
Locality Name (eg, city) []:.
Organization Name (eg, company) [Internet Widgits Pty Ltd]:.
Organizational Unit Name (eg, section) []:.Common Name (e.g. server FQDN or YOUR name) []:odroid
Email Address []:.
Rezultatem tego polecenia będzie utworzenie pliku „self-signed-ca-cert.crt”.
Teraz musimy utworzyć klucz dla certyfikatu Bitwardena:openssl genpkey -algorithm RSA -out bitwarden.key -outform PEM -pkeyopt rsa_keygen_bits:2048
Zostanie utworzony plik bitwarden.key. Następnie musimy stworzyć „certificate request file”:openssl req -new -key bitwarden.key -out bitwarden.csr
Tutaj znowu krótka ankieta, w której wszędzie wstawiamy kropki, poza polem „Common name”, w którym musimy podać adres naszego serwera, który może być adresem lokalnym, czyli „192.168.88.7”.You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
Country Name (2 letter code) [AU]:.
State or Province Name (full name) [Some-State]:.
Locality Name (eg, city) []:.
Organization Name (eg, company) [Internet Widgits Pty Ltd]:.
Organizational Unit Name (eg, section) []:.Common Name (e.g. server FQDN or YOUR name) []:192.168.88.7
Email Address []:.
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:.
An optional company name []:.
Zostanie utworzony plik bitwarden.csr. Ostatnim plikiem jaki musimy utworzyć jest:nano bitwarden.ext
Do którego wklejamy:authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
IP.1 = 192.168.88.7
Jako parametr IP.1 podajemy ten sam adres co przy poprzednim punkcie, czyli „192.168.88.7”. Plik w takiej formie zapisujemy i wychodzimy z edytora.
Tak utworzony certyfikat musimy teraz podpisać przez wcześniej utworzone CA:openssl x509 -req -in bitwarden.csr -CA self-signed-ca-cert.crt -CAkey private-ca.key -CAcreateserial -out bitwarden.crt -days 365 -sha256 -extfile bitwarden.ext
Efektem końcowym będzie utworzenie pliku bitwarden.crt. Warto zauważyć, że ustawiliśmy ważność certyfikatu na 365 dni. Dlaczego nie podpisaliśmy go od razu na 10 lat tak jak to zrobiliśmy dla CA? Niestety niektóre podmioty uznają za prawidłowe jedynie certyfikaty, które są ważne do maksymalnie roku (plus/minus parę dni). W przypadku Apple jest to na przykład 398 dni. Z uwagi na to, co rok będziemy musieli wykonywać ten ostatni krok i przedłużać certyfikat Bitwardena na kolejny okres.
Dalej przenieśmy utworzony i podpisany certyfikat bitwardena wraz z jego kluczem do folderu dla certyfikatów na naszym serwerze:sudo mv bitwarden.crt bitwarden.key /etc/ssl/certs
Pozostałe pliki proponuję zachować w folderze /etc/ssl na przyszłość:sudo mkdir /etc/ssl/CA
sudo mv bitwarden.csr bitwarden.ext private-ca.key self-signed-ca-cert.crt self-signed-ca-cert.srl /etc/ssl/CA
Gdy już rozwiązaliśmy problem z certyfikatami, tworzymy na nowo nasz kontener Bitwardena, ale poleceniem zmodyfikowanym o te certyfikaty:docker run -d \
--name bitwarden \
-e PUID=1000 \
-e PGID=1000 \
--restart unless-stopped \
-v /bw-data:/data \
-v /etc/ssl/certs:/ssl \
-e ROCKET_TLS='{certs="/ssl/bitwarden.crt",key="/ssl/bitwarden.key"}' \
-p 83:80 \
vaultwarden/server:latest
Konfiguracja
Bitwarden jest dostępny w przeglądarce pod adresem „https://192.168.88.7:83″. Jednak przed rozpoczęciem czegokolwiek musimy na wszystkie swoje urządzenia i przeglądarki wrzucić certyfikat Root CA.
Zacznijmy od wyciągnięcia go z serwera. Wykorzystamy do tego zaimplementowaną w poprzednim wpisie usługę NextCloud. Z poziomu serwera skopiujmy certyfikat do NextCloud:cp /etc/ssl/CA/self-signed-ca-cert.crt /home/odroid/nextcloud
Teraz certyfikat będzie dostępny do pobrania z głównego folderu NextCloud na dowolnym urządzeniu posiadającym klienta NC lub przez przeglądarkę. Omówmy sobie jak go zaaplikować do najpopularniejszych przeglądarek i urządzeń:
Firefox – „Ustawienia -> Prywatność i bezpieczeństwo -> Certyfikaty -> Wyświetl certyfikaty… -> zakładka Organy certyfikacji -> Importuj…” wybieramy z dysku certyfikat ściągnięty z NextCloud, w okienku zaznaczamy „Zaufaj temu CA przy identyfikacji witryn internetowych.”, na koniec potwierdzamy przyciskiem OK. Dobrze jest zrestartować przeglądarkę.
Chrome – „Ustawienia -> Prywatność i bezpieczeństwo -> Bezpieczeństwo -> Zarządzaj certyfikatami -> odpali się okno Certyfikaty -> zakładka Zaufane główne urzędy certyfikacji -> Importuj… -> Dalej -> Przeglądaj… -> wybieramy z dysku certyfikat ściągnięty z NextCloud -> Dalej -> Zakończ”, na koniec wyskoczy pewnie jeszcze Security Warning, na którym potwierdzamy Tak. Dobrze jest zrestartować przeglądarkę.
iOS / iPadOS – tutaj wystarczy w dowolny sposób przerzucić certyfikat na urządzenie (np. przez AirDrop z Macbooka) lub pobrać je bezpośrednio z NextCloud, po jego uruchomieniu lub od razu po wgraniu powinno na iPhone wyskoczyć okienko „Wybierz urządzenie, na którym chcesz zainstalować ten profil” i wybieramy iPhone, po czym certyfikat powinien sam już pojawić się w ustawieniach i wystarczy go włączyć w „Ustawienia -> Ogólne -> VPN i urządzenia zarządzane -> sekcja Profil konfiguracji -> tu powinien już być do wybrania nasz certyfikat pod nazwą, którą mu nadaliśmy -> Zainstaluj -> podajemy kod do odblokowania urządzenia -> Instaluj -> wychodzimy OK”. Konieczne jest jeszcze dodanie certyfikatu do zaufanych w „Ustawienia -> Ogólne -> To urządzenie… -> na samym dole Ustawienia zaufanych certyfikatów -> sekcja Włącz pełne zaufanie do certyfikatów głównych -> aktywujemy nasz certyfikat, tak aby przełącznik znajdujący się przy nim był na zielono” -> w okienku, które wyskoczy wciskamy Dalej” i gotowe.
Android – tak samo jak na iOS wystarczy w dowolny sposób pobrać certyfikat na telefon i otworzyć go, zostaniemy zapytani czy otworzyć Instalator certyfikatów, oczywiście potwierdzamy i zostaniemy przeniesieni do okienka, w którym podajemy nazwę certyfikatu oraz z listy rozwijanej wybieramy, że ma zostać użyty dla VPN i aplikacji.
Teraz, gdy już dla wszystkich urządzeń mamy zainstalowane certyfikaty, możemy przejść pod adresem „https://192.168.88.7:83″ i zalogować się do Bitwardena. Przydatną rzeczą w kontekście menedżera haseł jest posiadanie aplikacji mobilnych i/lub rozszerzenia do przeglądarek, które same będą nam przeszukiwać bazę haseł i wypełniać odpowiednie z nich na odpowiednich stronach. Bitwarden udostępnia aplikacje na każdy popularny system operacyjny i rozszerzenia do wszystkich przeglądarek. Jednak w naszym przypadku, aby korzystać z tych aplikacji/rozszerzeń musimy wskazać nasz serwer niestandarowy, czyli po instalacji na ekranie logowania wejść do ustawień (nacisnąć ikonę koła zębatego) i podać serwer URL „https://192.168.88.7:83″, po czym normalnie się zalogować.
Na koniec ULTRA ważna rzecz! Pamiętajcie, że istnieje zjawisko złośliwości rzeczy martwych i dobrze jest zawsze zakładać, że istnieje prawdopodobieństwo uszkodzenia naszego serwera, co będzie skutkowało utratą dostępu do naszych wszystkich haseł. Jeżeli utracimy taki dostęp to możemy mieć naprawdę duży problem. Dlatego pamiętajcie, żeby co jakiś czas exportować swój skarbiec i przechowywać jego back-up w bezpiecznym miejscu (najlepiej zgodnie z zasadą 3-2-1, pamiętacie?).
Jeżeli materiał zawarty w tym wpisie jest dla Ciebie wartościowy i masz ochotę wesprzeć moją pracę to zapraszam na mój profil na >Patronite<. Zachęcam także do odwiedzenia mojej strony >tomaszdunia.pl<. Możesz także zagadać do mnie na Twitterze >@theto3k<.
Poprzedni wpis:
NextCloud – twój prywatny Dropbox
Następny wpis:
VS Code – środowisko deweloperskie w przeglądarce
Komentarze: 2 - “Bitwarden – twój prywatny menedżer haseł”
Dodaj komentarz Anuluj pisanie odpowiedzi
Kategorie: Dla początkujących,Poradniki,Usługi - @ 2022-07-08 18:00
Tagi: 1password, Android, bitwarden, CA, certyfikat SSL, dashline, docker, firefox, https, ios, ipados, keepassxc, lastpass, menedżer haseł, open source, openssl, password manager, self hosted
Chciałbym się dowiedzieć w jaki sposób mogę robić backup skarbca z bitwardena? Nie jestem jakimś specem od linuxa i chciałbym się dopytać gdzie w ogóle znajduje się jakis plik z wszystkimi hasłami do bitwardena?
Jeżeli chodzi o back up skarbca to proszę zauważyć, że przed uruchomieniem kontenera vaultwarden utworzyliśmy folder „/bw-data”, który jest wolumenem na pliki znajdujące się w folderze „/data” kontenera. Te foldery zostały skojarzone w trakcie tworzenia kontenera w linijce „-v /bw-data:/data \”. W praktyce wszystkie niezbędne pliki do działania kontenera są właśnie w tym folderze i to właśnie jego kopię zapasową należy zrobić, jeżeli chce się zachować skarbiec. Dobrze też pamiętać o backupie folderu „/etc/ssl/certs” z certyfikatami SSL, bez których vaultwarden nie będzie działał poprawnie.