はじめに
とある有名なパスワードマネージャーが有料化し、マルチデバイスができなくなったため移行した。
本家のものではなく、有志によって開発された非公式のbitwarden_rsを利用する。
目的
bitwarden_rsを自サーバに構築する。
サーバ構成
何人で使用するかによるが、1~3人程度なら512MBで十分。
- OS:Ubuntu 20.08
- CPU:1コア
- メモリ:1GB
dockerインストール
詳細は省略。
コマンドのみ記載する。
リポジトリ設定
dockerをインストールするためにリポジトリを設定する。
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
dockerエンジンインストール
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
dockerインストール
sudo apt-get install docker-ce= docker-ce-cli= containerd.io
sudo apt-get install docker-ce=5:19.03.9~3-0~ubuntu-focal docker-ce-cli=5:19.03.9~3-0~ubuntu-focal containerd.io
ユーザ設定
sudoなしでdockerを触れるようにする。
sudo groupadd docker
sudo gpasswd -a $USER docker
sudo systemctl restart docker
exit
自動起動設定
sudo service docker start
sudo systemctl enable docker
SSL証明書
以下のページを参考にしSSL証明書を作成する。
独自のルート認証局キー作成
パスワードを聞かれるので適当に入力する。
openssl genpkey -algorithm RSA -aes128 -out private-ca.key -outform PEM -pkeyopt rsa_keygen_bits:2048
ルートCA証明書作成
パスワードはルート認証局キーで設定したもの
Common Nameは「bitwarden_rs」とした。
それ以外はピリオド「.」を設定した。
openssl req -x509 -new -nodes -sha256 -days 3650 -key private-ca.key -out self-signed-ca-cert.crt
このコマンドを実行することで以下2ファイルが作成される。
- private-ca.key
- self-signed-ca-cert.crt
bitwardenサーバキー作成
以下のコマンドを実行し「bitwarden.key」を作成する。
openssl genpkey -algorithm RSA -out bitwarden.key -outform PEM -pkeyopt rsa_keygen_bits:2048
証明書要求ファイル作成
Common Name以外はピリオド「.」
Common NameはサーバのIPアドレスを設定する。
openssl req -new -key bitwarden.key -out bitwarden.csr
bitwarden.ext作成
nano bitwarden.ext
IP.1にサーバのIPアドレスを設定する。
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
IP.1 = <サーバのIPアドレス>
bitwarden証明書に署名
パスワードはルート認証局キーで設定したもの
このコマンドを定期的に実行して証明書を更新する必要がある。
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
証明書のシステムフォルダに移動
sudo mv bitwarden.crt bitwarden.key /etc/ssl/certs/
bitwarden起動
docker起動
ポートは8080としている。
docker run -d --name bitwarden --restart unless-stopped -v /bw-data:/data -v /etc/ssl/certs:/ssl -e ROCKET_TLS='{certs="/ssl/bitwarden.crt",key="/ssl/bitwarden.key"}' -e SIGNUPS_ALLOWED=true -p 8080:80 bitwardenrs/server:latest
証明書インポート
WinSCPなどを使用して上記「SSL証明書」で作成した「self-signed-ca-cert.crt」をサーバから取得する。
その後、クライアントPC側で信頼されたルート証明機関にインポートする。
起動確認
以下のURLで接続する。
証明書が正しくインストールされていれば証明書関連の警告は出ない。
https://<サーバIP>:<ポート>/
アカウント作成後
dockerを停止&削除後、アカウント作成不可にして再起動する。
docker stop bitwarden
docker rm bitwarden
docker run -d --name bitwarden --restart unless-stopped -v /bw-data:/data -v /etc/ssl/certs:/ssl -e ROCKET_TLS='{certs="/ssl/bitwarden.crt",key="/ssl/bitwarden.key"}' -e SIGNUPS_ALLOWED=false -p 8080:80 bitwardenrs/server:latest
おわりに
上記の手順でbitwarden_rsを自サーバに構築できた。
次回はクライアント側の初期設定とbitwarden_rsの更新&バックアップを記載する。