0. 背景

超过 10 年网龄的我,注册过很多网站帐号,而出于安全方面的考量(避免脱库),每个网站的密码都用不同的复杂的随机密码,这时候一个密码管理器就显得十分有必要,我使用的是 LastPass 免费版,至今已经用了 8 年有余(特意查了下 Item 的最早记录)。

不过最近几年,听到 LastPass 有安全泄露问题的消息越来越多,对于一个软件开发从业者来说,密码的安全是我非常关注的。

可没想到的是,安全带来的代价,却让我最终放弃 LastPass ,可能你无法相信,但事实确实如此。

不知何时开始的,LastPass 经常定期会要求已经授权的设备进行重新授权(事后才知晓的)。

这听起来是一件好事,但给我带来了非常糟糕的使用体验。

有一次印象非常深刻,也是第一次出现这种问题,当时我以为是使用时间太久,输入主密码就可以重新登陆使用,但是那次无论我用密码登陆多少次,都提示我去邮箱重新授权,但死活在 163 邮箱里收不到邮件,我非常的害怕,害怕我这么多年的保险箱就这么没了。这种状态给了我非常大的打击,我非常懊恼当时为什么选择它,也非常纳闷为什么一个产品会越来越用?

直到一次偶然的机会,我登陆了我多年未使用的 QQ ,发现在 QQ 邮箱里有 LastPass 的邮件,原来 LastPass 把邮件发到了这里,但是为什么呢?难道以前设置过安全邮箱?可是过后我在 LastPass 的官网里好像找不到相关的设置(或许是我没有找到)。

重新授权登陆后,由于工作忙,我没有继续跟进这件事了,也没有进行复盘,怎么会遇到这种事情,下次遇到这种事情该如何处理。

以至于到昨天晚上,我需要登陆一些帐号, LastPass 又在关键时刻,罢工了。

是的,它又提示我要重新授权才能使用,可问题是163 邮箱无论如何也收不到授权邮件。由于时间过了太久,不记得之前是发到 QQ 邮箱里去了,我开始又陷入了深深的自责,吃一垫为什么不长智?

幸运的是,由于近期做一些项目,手机上有下载 QQ,经常要登陆 QQ,看到邮箱里的消息,才又回想起之前的种种。

如果不是两次偶然的机会,让我有机会在 QQ 邮箱里看到授权邮件,恐怕我积累多年的 200 百多个密码,就全部丢失了,要知道密码数据对我来说有多么的重要,因为不是所有的帐号都能使用手机重设密码的。

经历了两次生与死的挣扎,害怕这种事情再次发生在自己的身上,于是我开始寻找市面上其他的解决方案,准备迁移数据到其他更好用的工具上。

在开始之前,先梳理了下自己的需求:

  1. 跨平台:浏览器,手机(Android,iOS)、电脑(Windows、MacOS),而且还要不限制设备数
  2. 免费:能免费就尽量用免费的(前提是安全性满足),省点钱毕竟还要还房贷
  3. 安全:这点最重要了,自不必说

综合考量之下,选定了 Bitwarden 这款工具,相对于LastPass的优势,Bitwarden有如下几个优势:

  1. 开源:Bitwarden是一款开源软件,这意味着任何人都可以查看并审查其代码,确保无后门、安全可靠。而LastPass则是一个闭源商业软件。
  2. 更便宜:Bitwarden提供免费和付费的服务计划。对于个人用户来说,它的付费计划要比LastPass便宜,提供的功能也更丰富。
  3. 更好的隐私:与LastPass不同,Bitwarden不会跟踪或出售用户的数据。此外,Bitwarden使用加密技术存储您的数据,并且只有用户拥有解密的密钥。
  4. 跨平台支持:Bitwarden支持iOS、Android、Windows、macOS、Linux等多个平台。而LastPass则仅支持较少的平台。
  5. 无限密码共享:在Bitwarden中,用户可以创建任意数量的密码共享组,并分享其中的密码给其他人,这是LastPass不支持的一个功能
  6. 社区氛围:由于Bitwarden使用范围更广泛,因此它有一个更大的社区,这意味着更好的支持、反馈和开发。它还提供了各种各样的浏览器插件和应用程序,使得我的体验更加完美。:

说干就干,从晚上 11 点开始查看文档,开始部署 Bitwarden,遇到了一些小问题,整到了凌晨一点,终于自己部署了下,以下是自己的部署过程,给有需要的朋友们可以做个参考

1. 前置知识

Bitwarden是一个强大的密码管理工具,它有着丰富的功能和强大的加密保护机制,同时也有易于使用的界面和跨平台支持。

  1. 加密存储:Bitwarden将所有的密码和账户信息加密后存储在云端或本地设备,并使用256位AES加密和PBKDF2 SHA-256哈希算法保护数据安全。每个用户都有自己的主密码,这是唯一能够解锁其加密数据的密码。
  2. 跨平台支持:Bitwarden提供了多种客户端应用程序,包括Windows、macOS、Linux、iOS和Android,以及浏览器扩展程序和Web应用程序,用户可以在各种平台上使用Bitwarden。
  3. 密码生成器:Bitwarden内置了随机密码生成器,可以生成更加复杂和安全的密码,这些密码包括数字、字母、符号等。
  4. 自动填充:Bitwarden能够自动填充登录凭据,用户无需手动输入用户名和密码。
  5. 分享和协作:Bitwarden允许用户与家人、朋友和同事共享密码和敏感信息。同时也可以创建组织并邀请团队成员进行协作。
  6. 多语言支持:Bitwarden支持多种语言,包括英语、中文、法语、德语、日语、韩语、西班牙语等。用户可以选择自己习惯的语言来使用。
  7. 开源授权:Bitwarden是一个开源软件,采用AGPLv3授权协议,用户可以自由分发和修改其代码。同时,Bitwarden使用了透明的开发过程,定期发布安全审计报告以保证安全性。

在搜索 Bitwarden 的使用时,还会经常看到 Vaultwarden 和 bitwarden_rs ,它们与 Bitwarden 是什么关系呢?

Bitwarden

  • 有专门开发团队运营的密码管理器,大部分功能是免费的,部分高级是收费的(如目录同步、SSO、群组、自定义角色以及基于企业组织层面的 Duo Security 两步登录)
  • 可以私有部署,但对对服务器的要求高,使用 .net 开发,用的是mssql,内存必需大于2G,对于小内存机器来说是跑不起来的。

Vaultwarden

  • Vaultwarden 是第三方开发的,并没有像Bitwarden那样的社区规模,但它也有自己的贡献者群体在维护和改进。
  • 可以私有部署,但比官方更轻量,使用 Rust 编写,改用 SQLite 数据库(现在也支持 MySQL 和 PostgreSQL),运行时只需要 10M 内存,可以说对硬件基本没有要求。
  • 以前的 bitwarden_rs,为了区分于官方的版本,特意改的名字

对比之下,Vaultwarden 优势非常的明显,建议大家和我一样,无脑使用 VaultWarden即可。

1. 私有部署

部署 Bitwarden 的方法有很多,使用 docker 是最方便的,一条命令即可

“`shell 
docker run -d –name vaultwarden \
–restart=always \
-e WEBSOCKET_ENABLED=true \
-e SIGNUPS_ALLOWED=true \
-e DOMAIN=https://vault.youdomain.com \
-e ADMIN_TOKEN=<you_master_password> \
-v /data/bitwarden/:/data/ \
-p 8080:80 \
-p 3012:3012 \
vaultwarden/server:latest

<pre><code class="">上面用到的参数有

“`shell
# 启用或禁用新用户注册:true启用,false禁用
SIGNUPS_ALLOWED=false

# 设置web访问域名,必须使用 https
DOMAIN=https://vault.yourdomain.com

# 是否启用WebSocket通知:true启用,false禁用
WEBSOCKET_ENABLED=true

# 启用管理后台并设置token,默认为空不启用,设置token后则启用
ADMIN_TOKEN=XXXXXXXXXXXX

还有更多的参数,可根据自己的需要进行设置

# 设置日志路径
LOG_FILE=data/access.log# 日志级别选项:trace、debug、info、warn、error 以及 off
LOG_LEVEL=warn
EXTENDED_LOGGING=true# 设置SQLites数据库存储路径及数据库名
DATABASE_URL=data/vaultwarden.db# 是否启用web客户端:true启用,false禁用
WEB_VAULT_ENABLED=true# 修改线程,默认为10,若用户多可修改为更大,一般默认不需要设置
ROCKET_WORKERS=20# 显示密码提示:true启用,false禁用
SHOW_PASSWORD_HINT=false# 设置SMTP
SMTP_HOST=smtp.test.com
SMTP_FROM=test@test.com
SMTP_PORT=465
SMTP_USERNAME=test@test.com
SMTP_PASSWORD=password
# 自v1.25.0起,不再设置SMTP_SSL和SMTP_EXPLICIT_TLS,使用SMTP_SECURITY替代,它有以下选项:starttls、force_tls和off。
# 465端口使用force_tls,587端口使用starttls,25端口使用off。
SMTP_SECURITY=force_tls# 启用或禁用邀请:true启用,false禁用
INVITATIONS_ALLOWED=false# 启用或禁用分享发送功能,默认开启,启用true,禁用false
SENDS_ALLOWED=false

2. 反向代理

2.1 域名解析

后端的 Bitwarden 服务已经成功运行,前端如何访问呢?

有两种方法:

  1. 直接使用 https://{ip}:{password}​ 访问 web
  2. 申请个域名,使用 https://{domain}​ 访问 web

使用 ip 访问,记得去设置安全组,开放端口

使用域名访问,可以使用子域名,省得再申请域名,个人推荐使用域名,使用上更方便。

在云厂商上设置好 DNS 解析后,还需要设置下 nginx 的反向代理,才可以使用域名进行访问。

2.2 反向代理

找到你的 nginx 配置文件路径,假设是 /usr/local/nginx/conf/nginx.conf,添加如下配置,并重启 nginx 服务。

# 'upstream' 指令确保你有一个 http/1.1 连接
# 这里启用了 keepalive 选项并拥有更好的性能
#
# 此处定义服务器的 IP 和端口。
upstream vaultwarden-default {zone vaultwarden-default 64k;server 127.0.0.1:8080;keepalive 2;
}
upstream vaultwarden-ws {zone vaultwarden-ws 64k;server 127.0.0.1:3012;keepalive 2;
}# 将 HTTP 重定向到 HTTPS
server {listen 80;listen [::]:80;server_name pwd.iswbm.com;return 301 https://hostrequest_uri;
}server {listen 443 ssl http2;listen [::]:443 ssl http2;server_name pwd.iswbm.com;# 根据需要指定 SSL 配置ssl_certificate /etc/letsencrypt/live/iswbm.com/cert.pem;ssl_certificate_key /etc/letsencrypt/live/<you_domain>/privkey.pem;ssl_trusted_certificate /etc/letsencrypt/live/<you_domain>/cert.pem;client_max_body_size 128M;location / {proxy_http_version 1.1;proxy_set_header "Connection" "";proxy_set_header Host host;proxy_set_header X-Real-IPremote_addr;proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Protoscheme;proxy_pass http://vaultwarden-default;}location /notifications/hub/negotiate {proxy_http_version 1.1;proxy_set_header "Connection" "";proxy_set_header Host host;proxy_set_header X-Real-IPremote_addr;proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Protoscheme;proxy_pass http://vaultwarden-default;}location /notifications/hub {proxy_http_version 1.1;proxy_set_header Upgrade http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Hosthost;proxy_set_header X-Real-IP remote_addr;proxy_set_header Forwardedremote_addr;proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Protoscheme;proxy_pass http://vaultwarden-ws;}# 除了 ADMIN_TOKEN 之外,还可以选择添加额外的身份验证# 删除下面的 '#' 注释并创建 htpasswd_file 以使其处于活动状态##location /admin {#  # 参阅: https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/#  auth_basic "Private";#  auth_basic_user_file /path/to/htpasswd_file;##  proxy_http_version 1.1;#  proxy_set_header "Connection" "";##  proxy_set_header Host host;#  proxy_set_header X-Real-IPremote_addr;#  proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;#  proxy_set_header X-Forwarded-Protoscheme;##  proxy_pass http://vaultwarden-default;#}
}

3. 创建帐号

设置好反向代理后,就可以使用域名直接登陆 BitWarden,首次登陆,要先创建帐户

输入邮箱 等其他相关信息,密码千万记住,主密码提示最好写下,省得忘记主密码。

帐号创建完成后,跳转到登陆界面输入主密码进行登陆

登陆后的界面如下

4. 数据迁移

万事具备,只剩迁移,VaultWarden 对于市面上的几乎所有的密码管理器都提供数据导入功能,你听过的没听过的都支持,应该有几十种,包括:

  • LastPass
  • 1Password
  • KeePass
  • Chrome & Firefox & Safari
  • 等等

我之前的主要平台是 LastPass ,在如下位置就可以将密码导出为 csv 格式

回到 https://vault.youdomain.com 选择工具 – 导入数据

5. 客户端

Bitwarden 提供了全平台的客户端软件,以下是常用的一些平台客户端,附上了链接,可以直接下载

  • Chrome
  • FireFox
  • Safari
  • Windows
  • MacOS
  • Linux
  • iOS:App Store 搜索 BitWarden
  • Android: Google Play 搜索 BitWarden

未在此列的平台,可前往官网进行下载:https://bitwarden.com/download

以 Chrome 插件和 iOS 为例,介绍下用法

Chrome 插件

安装完成后,先点击左上角的设置私人服务器(https://vault.youdomain.com)后

再使用邮箱登陆,就能连接到自己的密码库啦~

iOS 客户端

在 App Store 安装后,也是和上面一样,先设置私人服务器,也就是前面设置的域名。再输入主密码,就可以登陆上自己的密码管理器。

为了在手机上有更好的体验,需要设置一下,开启自动填充。

在 设置​ -> 密码​ -> 密码选项​,允许 BitWarden 做为密码的填充源

其他平台

若你手上有其他的设备,方法都是类似的,可自行设置。

‍6. 高级功能

安全报告

Bitwarden 还会生成一系列的安全报告,以保护用户密码的安全。

它会将密码以及邮箱地址与已经公开的,被泄露的数据库中的内容进行对比,并找出这些不安全的密码,另外也会与你自己的密码库中的密码进行对比,防止一个密码被重复使用多次。它能够找到那些非常容易被破解的密码,在自动填写的域名中未使用 https 的,以及网站有两步验证但并未被启用的,并进行提醒,增加密码的安全程度。

测试了下自己的密码,有很多都是有高危风险,这两天就要统一整改下。

账户保护

除了普通的账号密码,以及两步验证(必须通过网页端开启)外,Bitwarden 还通过 “指纹短语”(fingerprint phrase)来保护帐号安全。每个帐号都有一个固定的,由 5 个英语单词组成的指纹短语,且不会改变。可以通过验证指纹短语,来判断所连接到正确的的 Bitwarden 服务器。或用来验证添加到组织中的帐号是否为正确的帐号。

它还支持通过修改 KDF 迭代来防止主密码遭到暴力破解。

其他一些安全措施,别的密码管理软件也具有,像后台自动锁定,禁止截图等等,这里就不展开细说了。

总而言之,它所提供的功能非常丰富,在生成管理密码外,还有一系列保护账户安全的功能,

7. 说在最后

私有部署 BitWarden ,不仅自己可以用,也可以给家里人使用,但注册好后,请及时将关闭 web 功能,或者关闭注册功能。

虽然数据和隐私完全掌握在自己的手里,但这一切的前提是安全,服务器的安全需要自己维护,若有没有安全方面的经验,最好去学习一下,明哥这边给一些基本的建议:

  • 服务器禁止密码登陆,只开启使用密钥登陆
  • 及时升级软件,避免三方软件的安全漏洞
  • 对数据进行定期的备份,防止数据误删除
  • 限制不必要的端口,安全组别乱开

总之,便利与安全是两个是相互对抗,只能平衡,不能消除,使用 BitWarden 一定要注意做好安全措施。

8. 参考文档

  • BitWarden 帮助中心 – 中文版:https://help.ppgg.in/
  • BitWarden 客户端下载中心:https://bitwarden.com/download/

转载至使用 VaultWarden 搭建个人密码管理器

使用 VaultWarden 搭建个人密码管理器 原先Bitwarden相关推荐

  1. 使用Docker搭建自己的在线密码管理器软件-Bitwarden

    前言 因为现在网络安全问题愈发严重,黑客经常通过互联网已泄露的用户和密码信息进行撞库攻击,而且很多用户在不同网站使用的是相同的帐号密码,所以为不同的网站设置不同的密码就非常重要. 但密码不同尤其是使用 ...

  2. 基于 Bitwarden 搭建密码管理器(群晖 Docker)

    本文介绍如何在自己的群晖上使用 Docker 对全平台密码管理服务器 Bitwarden 进行私有部署. 目前的密码管理器方案有 1Password,Lastpass,KeePass,Bitwarde ...

  3. 如何通过 Docker 快速部署开源密码管理器 Bitwarden

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 前言 两年前,我就想自托管 Bitwarden 密码管理器了,但是直到 2022 年快结束的现在,我才真正动手.在 ...

  4. 无状态密码管理器Heimdallr

    什么是 Heimdallr ? Heimdallr 是一个无状态的密码管理器/生成器.是否厌倦了不断记住网站或应用程序的密码?是否忘记将新帐户写入密码管理器或忘记将其与另一台设备同步?Heimdall ...

  5. PyQT 跟我学做密码管理器(1)

    PyQT 跟我学做密码管理器(1)-- 初始化UI控件 声明:本文借鉴https://blog.csdn.net/bigbennyguo/article/details/50755207 修改而来 前 ...

  6. 宝塔面板Docker部署Bitwarden密码管理器 - 保姆级教程

    本文作者: 南风 文章标题:宝塔面板Docker部署Bitwarden密码管理器 原文地址:https://www.nfxwblog.com/archives/40.html 版权说明:若无注明,本文 ...

  7. 火狐浏览器锁定搜索_firefox锁定密码管理器的安全性如何

    火狐浏览器锁定搜索 After hearing that LastPass was acquired by a private equity firm[1], I decided it might b ...

  8. Firefox 密码管理器 Lockbox 推出 Android 版

    开发四年只会写业务代码,分布式高并发都不会还做程序员?   Mozilla 今日在 Android 上推出了一项新功能"Firefox Lockbox",该功能此前已经出现在桌面( ...

  9. 幕后产品_使用Bitwarden密码管理器在幕后

    幕后产品 我们是人类. 我们每天都被技术和帐户所淹没,大多数人会选择一个容易记住的密码. -乔纳森·勒布朗(Jonathan LeBlanc),前PayPal 必须记住Web应用程序,电子邮件,银行帐 ...

最新文章

  1. 【Swift】变量/常量/类型总结
  2. 编程语言python入门要电脑什么配置能带动-Python是万能的编程语言吗?这五大用途很重要!...
  3. JSP页面中<%!%>与<%%>与<%=%>
  4. SpringMVC Controller 和 Servlet的关系
  5. python 终端打印表格--------pylsy 源码
  6. 第一课 前言 学PHP就是为了做网站
  7. 神经网络算法的相关知识
  8. 022-红黑树(三)
  9. while循环打印*菱形
  10. 通俗解释glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用 (
  11. centos下使用composer安装yii2框架
  12. stm32 USART rs485 rs232
  13. hbase 二进制数据写入_HBase总结
  14. html5控制字大小的代码,js根据字符串长度控制字体大小代码
  15. 学生评语管理系统软件测试,学校教师老师综合评价评分系统软件
  16. eclipse命令大全
  17. Android 安装自身更新APK时,包解析错误或无法访问文件的可能原因
  18. python 绘制新冠肺炎疫情地图
  19. 计算机OSI七层参考模型
  20. Python3|Opencv——dst参数的含义和使用

热门文章

  1. ERA5 积雪 降雪 区别_漠河降雪量已达入秋最大级别 本轮降雪将持续到28日白天...
  2. 舍与得 -- 诠释舍得
  3. 为什么测试/开发程序员喜欢跳槽?不要太在意一时得失,有舍才有得......
  4. 读书笔记本09/02/20
  5. phy芯片测试寄存器_以太网PHY寄存器分析
  6. 每日分享(在线截图生成器 在线聊天对话生成网站源码)
  7. 【转载】Win10彻底删除蓝牙设备
  8. ceph iscsi
  9. LSTM解决梯度消失问题
  10. 除了jsonp 跨域外还有CROS