很多人都会使用密码管理服务来对登录信息进行统一管理,如大名鼎鼎的 1PasswordLastPass 等,这些密码管理服务在一定程度上甚至可以让我们不用再刻意关注「密码记忆」这件事。

就我个人而言,因为一直使用 Google 的相关服务,所以我在浏览器中主要使用的是 Google 的密码管理服务,针对浏览器端免费的 LastPass 则作为解决跨平台问题的辅助解决方案,尽可能做到密码管理全平台覆盖(虽然主要还是针对浏览器端)。

但在近期,我决定换掉这个辅助方案。

从 LastPass 到 Bitwarden

此前之所以选择 LastPass 主要看中以下几点:

  • 浏览器端免费使用。相比 1Password,LastPass 几乎算得上「便宜大碗」的密码管理服务了,如果只在桌面浏览器端以扩展的形式使用,那我们完全可以将其看作是一款完全免费的密码管理工具。
  • 基础功能够用。我对密码管理没有太高的要求,注册新账号时可以记住账户名和密码、需要使用的时候可以快速填充即可,其他高级功能几乎用不到。

而最终选择换掉 LastPass 则出于以下几个原因:

  • 基于公有云安全性的考虑。LastPass 和 1PassWord 有所不同的是,LastPass 是基于公有云的密码管理服务,也就是说密码会被其存储在公有云上,这就引入了出现安全事故的风险。事实上,LastPass 也的确出现过登录信息泄露的情况,而一旦密码库数据泄露,整个账户密码信息都需要重新激活,最终演变成一场个人信息安全灾难。
  • 访问问题。由于 LastPass 的服务器都在海外,所以在国内访问时会经常遇到无法访问在线密码库的情况,严重影响产品体验。
  • 功能限制。只要跨平台就需要收费。

考虑到这些因素,我决定寻找一个可以实现密码库本地可控、同时功能上不输其他密码管理服务的替代产品,并最终选择了 Bitwarden。具体而言,Bitwarden 的主要特性包括:

  • 可实现私有化部署:因为 Bitwarden 是一款开源的密码管理服务,因此我们可以将其安装并部署在自己的服务器上,相关的登录信息自然也都保存在自己手中。很大程度上降低了相关信息泄露的可能性。
  • 完整的密码管理功能:作为辅助密码管理服务,我对 Bitwarden 的实际要求并不高,只需要实现密码存储和表单充填功能即可。Bitwarden 有着功能相对完善的浏览器扩展,基本可以实现我的需求。
  • 无平台限制:虽然是开源服务,但 Bitwarden 提供了平台覆盖全面的客户端,包括桌面应用、浏览器扩展、手机客户端等等,对于私有化部署的只需要添加密码库地址就可以正常使用,当然也就没有所谓的平台限制,毕竟都是自己免费部署的。

所以下面我们就一起来将 Bitwarden 部署到私有云中,实现「我的密码我做主」吧!

在私有云环境下部署 Bitwarden

考虑到登录信息的安全性,我选择将 Bitwarden 直接部署到我家中的 NAS 中。这样整个密码库都被保存在家中本地环境中,而我后面只需要让安装在本地 NAS 中的 Bitwarden 可以在外网正常访问并使用即可。

所以我的思路是将 Bitwarden 以 Docker 镜像的形式安装在家中的 NAS 上,同时通过 frp 服务将其服务暴露到公网中

由于 Bitwarden 注册和登录账号都需要对应的网址域名必须是 https,因此我还需要准备一个经过备案的域名,一台云服务器(也可以是虚拟主机)并申请对应域名的域名证书。

在 NAS 上使用 Docker 部署 Bitwarden

首先我先登录家中的 NAS 管理页面(我这里用的是群晖 DS218+),在应用商店中找到 Docker 并安装对应的服务。如果你已经安装,直接打开 Docker 并点击侧边栏中的注册表,在上方的搜索栏输入 Bitwarden 并搜索,然后选择结果中的第一个 Bitwardenrs/server 镜像并双击下载。

下载 Bitwardenrs/server

在下载的过程我们打开文件管理器,在 Docker 目录下新建一个 Bitwarden 的新文件夹,这里未来将存储相关数据。

创建文件夹

回到 Docker 中,镜像下载完成之后,在映像中找到刚才下载的 Bitwardenrs/server 镜像,双击创建容器:

创建容器

在常规设置的下面点击「高级设置」,然后勾选「启用自动重新启动」。

添加文件夹

在「卷」选项卡中点击添加文件夹,然后文件夹中选择刚才我们在 Docker 目录下新建的 Bitwarden 的文件夹,然后在转载路径中输入 /data/

端口设置

在「端口设置」这里需要特别注意,在容器端口 80 的那一行中填写一个你记得住的本地端口(比如我设置的 8063)然后点击应用。紧接着完成容器的创建过程并启动。

部署成功

如果不出意外的话,打开浏览器并访问 http://NAS 的内网地址:本地端口 应该就可以访问到 Bitwarden 在线的登录/注册页面,至此 Bitwarden 的部署基本完成。

在 NAS 上反向代理 https 设置

虽然我们已经成功在 NAS 通过容器完成对 Bitwarden 的部署,但如果你点击注册页面是无法完成注册的。原因是 Bitwarden 要实现注册和登录必须在超文本传输安全协议下进行,也就是说我们需要为其配置单独的域名和域名证书。

这里我们需要一个经过备案的域名,我使用的是已经在腾讯云完成备案的域名,设置好二级域名并通过域名解析服务解析到你的云服务器上。

关联阅读:2020 年,如何才能拥有一个个人网站?

完成解析

完成解析之后,我们再到云服务商的控制台中申请域名证书,因为都在同一个服务商,因此这里我直接申请了一年的免费单域名证书,根据要求完成解析配置之后,点击下载证书将其下载到本地。

通过免费单域名证书完成解析配置并下载

下载的证书里包含了针对不同的网页服务器的分类配置包,这里我们只用到针对 apache 配置方案,打开 NAS 的控制面板,找到「安全性 > 证书」,点击新增证书,然后分别将私钥(key)和证书(crt)文件上传(这里无需安装 chain.crt 证书链),最后点击确定完成导入。

导入证书文件

下面我们需要通过反向代理让后面的内网穿透服务可以直接访问 https 服务,具体到 NAS 中就需要我们将这个服务反向代理成 HTTPS 服务。打开 NAS 的控制面板,找到「应用程序门户 > 反向代理服务器」,点击新增来添加 Bitwarden 的 https 反向代理。

新增反向代理

在新建的规则中输入服务的描述名、主机名(你刚刚新建的二级域名),以及希望远程访问的端口(这里我设置的是 6063),而目的地则是你本机服务对应的端口(前面我们设置了8063这个端口),需要注意的是来源协议必须选择 https,而目的地是 http,然后点击确定。

完成配置

紧接着我们需要给这个服务配上域名证书,点击「控制面板 > 安全性 > 证书」,点击配置后在弹出的服务中找到刚才我们配置的密码服务,在证书里选择刚刚我们导入的证书,然后点击确定,到这里 https 相关的配置就已经基本完成了。

配置内网穿透服务

接下来我们需要配置内网穿透,以后就可以通过外网来访问和使用自己建立的 Bitwarden 服务,这里我使用的是 frp 这个内网穿透服务,首先我们需要在公网云主机服务中设置 frps 服务:

关联阅读:用开源免费的内网穿透工具 frp,实现远程桌面和文件传输

需要注意的是在这里要对 frps.ini 文件进行修改,除了默认的响应端口之外,还需要新增一个和 https 相关的端口,这里我设置的是 6080:

注意端口设置

配置好 frps 服务之后,我们需要给 NAS 配置 frpc 客户端。这里我选择依旧是通过 Docker,在注册表中搜索 frpc,选择第一个双击下载镜像。

在下载的间隙我们需要在 NAS 中的 Docker 目录下再新建一个名为 frpc 文件夹,然后在里面新建一个名为 frpc.ini 的文件,将下图内容根据自己的情况进行调整改写:

调整配置文件

这里 server_addr 对应的是你的云服务器的 ip 地址,另外 local__port 是你在反向代理服务中在来源下面填写的端口(前面我们设置的是6063),custom-domians 中我们填写的是二级域名。

然后回到 Docker,双击下载好的 frpc 映像来新建容器,在常规设置中勾选「使用高权限执行容器」,然后高级设置中的「卷」中,选择添加文件,文件目录选择刚才编辑的 frpc.ini 文件,而转载路径则填入 /frp/frpc.ini

设置装载路径

点击应用之后,在接下来的步骤中勾选「使用高权限执行容器」,点击下一步后直接运行容器。这里如果配置没有问题,实际上 frp 内网穿透应该已经生效了。

下面我们检验下公网访问情况,在浏览器输入 https://你的公网域名:端口号,如果可以看到 Bitwarden 的注册登录页面,就说明配置没有问题。

这里需要说明的是,端口号和此前在 frps 上新增的 vhost_https_port 所对应的端口号相同。至此我们的 Bitwarden 已经实现了在私有云中部署并且可以在公网中顺利访问了。

大功告成

注册并使用自建的 Bitwarden

接下来的工作就比较简单了。

注册、登录后进入 Bitwarden 的密码库管理界面,我们可以将此前在其他密码管理平台的密码库导入到 Bitwarden 中。以 LastPass 为例,在浏览器端登录 LastPass,在左侧的 More option 中找到 Export,点击之后输入密码库主密码下载你的密码库文件(csv 表单)文件。

导出 LastPass 登录信息

之后打开 Bitwarden 的工具页面,选择「导入数据」并选择 LastPass(CSV) 格式,在「选择要导入的文件」中选择刚刚导出来的 LastPass 密码库文件上传,然后点击「导入数据」,耐心等待一会儿,我们就可以看到此前的保存在其他密码库管理平台的登录信息都被导入到 Bitwarden 中了。

导入数据

好,接下来我们就可以通过各种客户端来使用密码库了,对于我来说我最常保存的是网络上的服务密码,因此我首先在浏览器扩展商店中下载了对应的网络扩展,安装完成之后点击扩展弹出的页面的左上角,在自托管环境中填入此前登录的网址并点击保存。

然后再登录你的账号和密码就可以连接上你的专属密码库啦!

自托管环境登录

有了扩展之后,当遇到需要登录账号的页面时,就可以在当前页面点击鼠标右键来实现自动填充密码,可以说还是相当方便的。

自动填充

至于密码保存提示上,只要你注册一个新的账号和密码就会在当前页面的上方给出保存提示,可以说和 LastPass 的使用体验基本类似。

保存提示

Bitwarden 其实也提供了和很多密码管理器类似的服务,比如说公开密码报告,重复使用的密码报告,弱密码报告等等,并且也可以根据一定的规则生成复杂密码。

密码生成器

而针对 Bitwarden 账号本身,我们还可以通过两步验证来加强安全性,配合私有云部署进一步保障安全性。

两步认证

结语

通过以上步骤,我们实现了将公有云的密码管理服务彻底迁移至我的私有云环境中,虽然配置步骤略为复杂,但无论从访问上还是安全性上都得到了很好的保证,有 NAS 环境的朋友不妨一试。

> 下载少数派 客户端 、关注 少数派公众号 ,发现更多使用工具和玩法 🍃

> 想申请成为少数派作者?冲!