自部署私人密码箱bitwarden

一个人一生中总要记住几个密码。

我们生活在被数字包围的世界里。为了证明你是你,你对某个资源拥有所有权。那么就需要密码。最常用的各种网站,还别说银行密码信用卡等等。市面上虽然有1Password等优秀商业方案,但是要付费。主流浏览器Chrome,Firefox等也提供原生的密码保存方案。 但是, 密码毕竟是个人数据, 自部署(self-hosted)是最佳方案。

树莓派小巧,省电,适合长时间做服务使用。本文介绍使用树莓派为例搭建开源自部署密码管理工具bitwarden。不过,本文也适合所有arm架构的服务器。对于x86服务器搭建bitwarden更为简单,就不赘述,直接参考官方文档即可。

准备docker和dockercompose

仅以树莓派为例, 可参考前文。或者自行Google其他文章和查看Docker官网
Install Docker Engine
Install Docker Compose

使用vaultwarden替代bitwarden-server

bitwarden官方不对arm的镜像提供支持,而且bitwarden-server的架构选型占用资源过多,不适合树莓派此类性能有限的平台,目前比较好的方案是是使用vaultwarden作为替代服务端。vaultwarden轻量化设计,实现了bitwarden的大部分API,支持bitwarden的客户端。使用sqlite作为服务端存储,并且提供了arm64的docker镜像,可以直接使用。

一个典型的dockercompose文件示例如下:

version: '3.3'

services:
  nginx:
    image: nginx:stable
    restart: always
    container_name: nginx
    volumes:
      - /path/to/nginx/conf.d:/etc/nginx/conf.d
      - /path/to/ssl:/etc/ssl
    ports:
      - "80:80"
      - "443:443"

 vaultwarden:
    image: vaultwarden/server:latest
    container_name: bitwarden
    restart: always
    volumes:
      - /path/to/bitwarden-data:/data/
    ports:
      - 8080:80
      - 3012:3012

配置Nginx,域名和ssl证书

为什么一定要ssl证书,因为bitwarden强制服务端必须提供https安全服务。所以这一步不能省。

  1. 域名(可选)。 如果有域名可以直接使用, 没有的话自行购买域名。无域名理论上OK,本文未尝试。
  2. 证书。可以使用自签名, 或者使用免费证书Let's Encrypt。 如果使用阿里云管理域名, 阿里云提供1年期的免费证书,直接工作台操作下载即可。
  3. 生成dhparam.pem(可选)
    如果跳过此步, 记得conf配置文件中相关配置去掉。
sudo openssl dhparam -out /path/to/dhparam.pem 2048
  1. 将以上文件目录修改到bitwarden.conf文件。
    一个典型的bitwarden.conf看起来像下面这样, 配置完成后放到conf.d目录下,重新启动nginx即可。
server {
  listen 443 ssl http2;
  server_name xxxx.com; #Change this to your domain name
  
  ssl_certificate      /etc/ssl/certs/xxxx.pem;   #Swap these out with Lets Encrypt Path if using signed cert
  ssl_certificate_key  /etc/ssl/certs/yyyy.key; #Swap these out with Lets Encrypt Path if using signed cert

  ssl_dhparam /etc/ssl/private/dhparams.pem;

  # Allow large attachments
  client_max_body_size 128M;

  location / {
    proxy_pass http://0.0.0.0:80;
    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://0.0.0.0:3012;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
  
  location /notifications/hub/negotiate {
    proxy_pass http://0.0.0.0:80;
  }
}

访问服务地址,查看是否正常显示,注册账号即可。
Screen-Shot-2021-06-06-at-17.05.52

安装浏览器插件和登录

在Chrome,Firefox等插件商店搜索bitwarden,并安装。 安装后点击图标打开界面,点击左上角配置(小齿轮)。
Screen-Shot-2021-06-06-at-16.22.12

填写自己服务地址,其他部分留空,点击右上角保存。
Screen-Shot-2021-06-06-at-17.01.50

在界面登录上一步账号,或者直接注册。登录后,就能使用了。大功告成!

导入浏览器(可选)

bitwarden支持从众多其他密码平台批量导入密码,非常全面。包括各种浏览器,LassPass,1Password等商业平台,也支持如passbolt等开源平台,很方便!

至此,是本文全部内容,感谢阅读。

本文参考了:
https://pimylifeup.com/raspberry-pi-bitwarden/