使用群晖 Docker 搭建第三方 Bitwarden(bitwarden_rs)密码服务器

文章目录
[隐藏]

Bitwarden 是一个跨平台的密码管理软件,类似于 1Password、EnPass、LastPass 等。Bitwarden 是免费开源的,可以将服务端部署在自己的服务器上,比如群晖,并且支持 Docker 部署。但官方的镜像要求至少 2G 以上内存,要求比较高。有人用 Rust 实现了 Bitwarden 服务器,项目叫 bitwarden_rs,并且提供了 Docker 镜像,这个实现更进一步降低了对机器配置的要求,并且 Docker 镜像体积很小,部署非常方便。

Docker 知识(官方的命令参数对应群晖 Docker 容器中的设置):

  • -v:对应容器中的 “卷”
  • -p:对应容器中的 “端口”
  • -e:对应容器中的 “环境”

准备

  1. 群晖安装 Docker。直接在群晖的套件中心搜索安装
  2. 你得有一个域名,并且有证书。因为 Bitwarden 必须开启 SSL 使用 https 登录,否则不能注册(注册时不能提交)和登录(提示 Cannot read property ‘importKey’)。证书可以在阿里云或 dnspod 免费申请,申请好以后下载(下载时 “服务器类型” 选 “其他”),然后导入群晖中
  3. 群晖中新建 docker/bitwarden/data 和 docker/bitwarden/ssl 两个目录(这个你自己随意建)
  4. 将证书从群晖中导出,解压后两个证书文件放置于 docker/bitwarden/ssl 目录中,并将 cert.pem 的文件命名为 fullchain.pem(不改名可能导致安卓客户端不能连接服务器,见文末的故障及解决

安装 Bitwarden 服务端

群晖 Docker-注册表中搜索mprasil/bitwarden,下载映像(目前新版为bitwardenrs/server

启动此映像,修改相应的容器设置如下:

  • 添加数据存储路径:“卷” 中添加 “文件夹路径”docker/bitwarden/data(根据你建的文件夹的路径修改);“装载路径”/data/(不能修改)
  • 添加证书路径:“卷” 中添加 “文件夹路径”docker/bitwarden/ssl(根据你建的文件夹的路径修改);“装载路径”/ssl/(不能修改)
  • “端口设置”:本地端口 8080(这个填写群晖未使用的一个端口);容器端口 80(此容器的端口);类型 TCP

一些配置

群晖中设置反向代理

网上很多教程说要设置群晖的反向代理,个人感觉不出来它的作用。目前未设置反向代理也未出现任何故障。

设置外网访问 Bitwarden 服务器

我的宽带供应商没有提供公网 IP,所以无法使用 DDNS,但我有使用 frp 做内网穿透,见我另一篇文章搭建 frp 内网穿透以访问 NAS,所以想要外面访问 Bitwarden 服务端,还需要修改 frpc 客户端配置文件。

frpc.ini 中增加如下配置信息:

[Bitwarden_server]
type = tcp
local_ip = 127.0.0.1 # 我的 frpc 客户端搭建在 NAS 上,所以直接本机
local_port = 8080 # 映射到 NAS 上的本地端口
remote_port = 8443 # 远程访问端口

搭建完成

浏览器中输入 http://mydomain.com:8443 应该就可以访问了

功能关闭及其他

更多功能查看 bitwarden_rs wiki

启用 HTTPS

添加环境变量 ROCKET_TLS,值 {certs="/ssl/fullchain.pem",key="/ssl/privkey.pem"}

Bitwarden 必须开启 SSL 使用 https 登录,否则不能注册(注册时不能提交)和登录(提示 Cannot read property ‘importKey’)。

关闭注册

添加环境变量 SIGNUPS_ALLOWED,值 false

关闭邀请

添加环境变量 INVITATIONS_ALLOWED,值 false

开启 log 记录

添加环境变量 LOG_FILE,值/data/bitwarden.log

备份数据库

直接复制 docker/bitwarden/data 文件夹下的 db.sqlite3 文件即可

故障及解决

Windows 客户端提示 Failed to fetch 错误

网页登录、Chrome 浏览器扩展、苹果和安卓 app 使用一切正常,但 Windows 版 Bitwarden 程序登录(以及创建帐号)时提示 Failed to fetch,试过删除账户、重新启动容器、容器操作中使用 “清除”、重装 app 等,都不能解决。

网上找到的只有一篇英文文章“Failed to fetch” errors on desktop app,然而并没有解决问题。

解决方法:查看群晖及容器都没有相关的日志记录,猜测是没有和服务端建立连接,最后测试发现和 Windows 系统代理设置有关。打开 “Windows 设置-网络和 Internet-代理”,关闭使用设置脚本即可。

安卓客户端登录时提示 “发生错误 There is a problem connecting to the server”

网页登录、Chrome 浏览器扩展、Windows 版 app、苹果 app 等使用一切正常,但安卓 app 登录提示此错误

解决方法:经过无数测试和搜索参考,最后将 docker/bitwarden/ssl 中的证书文件 cert.pem 命名为 fullchain.pem 后解决

具体参考 bitwarden_rs wikiEnabling HTTPS 中的这段文字:

Due to what is likely a certificate validation bug in Android, you need to make sure that your certificate includes the full chain of trust. In the case of certbot, this means using fullchain.pem instead of cert.pem.

安卓客户端登陆提示 “发生错误。Exception message:java.security.cert.CertPathValidatorException:Trust anchor for certification path not found.”

安卓系统中出现 java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 错误,是因为缺少中间证书导致证书校验异常。但 Bitwarden 中是无法配置中间证书的。

检查证书链完整性:https://www.digicert.com/help/(支持带端口检测)

解决方法:将你域名的中间证书安装到安卓手机中。参考链接

以我的三星 S8 手机为例。将文件名包含 root 字符的 crt 证书文件传到手机中,“设置” 里找到 “生物识别和安全性”-“其他安全设置”-“从设备存储空间安装”,选择刚才上传到手机中的证书,自定义一个证书名,“使用于” 选择 “VPN and apps”。

比较奇怪的是,我之前 S8 上未安装我的域名的中间证书,使用 Bitwarden 客户端登录的时候也没有这个错误提示,也使用了 Bitwarden 很长一段时间,最近(20200219)群晖 Docker 中更新了bitwardenrs/server镜像后各种客户端都无法同步了,就删除了重新安装和配置,其他客户端就都正常了,安卓客户端登录就出现此错误。

iOS 客户端可以登录,但同步的时候提示 “无法同步”

这个一般是因为连接速度慢导致,多试几次就可以了

Bitwarden 的缺点

  • 不能离线编辑
  • 无法自动同步
  • 不能自动登录,必须手动点击登录按钮。

相比较,1Passwords 更为方便。

其他

  • Bitwarden 的 “自动填充服务” 在三星 S8 中被自动禁用的解决:将 Bitwarden 加入 “自启动应用程序” 中即可
  • 2019-06-12 更新:新版的映像为bitwardenrs/server,使用同样的配置方式和原有的数据文件mprasil/bitwarden
    可以无损切换。

参考链接

已有 9 人 对 ”使用群晖 Docker 搭建第三方 Bitwarden(bitwarden_rs)密码服务器” 进行了评论

  1. jason说道:

    想问个问题,有没有管理员用户可以删除建立的账户呢

    • 王小喜说道:

      当然可以,Enabling admin page

      官方 wiki 有说明:https://github.com/dani-garcia/bitwarden_rs/wiki/Enabling-admin-page

      具体就是添加环境变量 ADMIN_TOKEN,值为你自己定义的任意一串字符

      然后 https://www.youdomin.com/admin 就可以进入管理界面了

  2. 阿锐说道:

    请问一下自己在群辉上建的可以使用两步认证的功能吗

  3. Stride说道:

    文章中的 docker 用错了,不应该使用 mprasil/bitwarden 应该使用 bitwardenrs/server

    • 王小喜说道:

      感谢提供这个信息。我看到 Note: you should use bitwardenrs/server instead of this image as that is the new official image.
      这个应该是新版的 Docker 吧,我来试试。

  4. 小贝说道:

    发现个小问题 :服务器使用的是 80 端口,苹果手机客户端连击不上,提示: there is problem connecting to the server.
    网页 、 mac 客户端、安卓客户端 都好使。唯独苹果手机不行!

    • test说道:

      可能是 IOS 禁止不安全网络连接吧,部署 https 试一下

    • 王小喜说道:

      既然其他客户端可以,就某一设备上的不行,多半就是此设备上系统代理的问题。和我 Windows 客户端遇到的 Failed to fetch 故障应该是一个道理。

      所以,看看你的 iOS 是不是被其他代理程序接管了,或者看一下网络里面的 “配置代理”,正常应该是关闭状态

对本文发表评论





8 + 7 = ?

注意:
1、请勿单纯发表顶啊、打酱油之类无任何意义的评论,否则将被视为spam!谢谢合作!
2、但欢迎你留下对本文的看法或技术上的任何疑问,我会及时回复你。