背景需求
作为一个资深“健忘症患者”,我深受密码困扰:
- 遗忘密码: 许久不用的平台,密码忘得一干二净,只能无奈重置。
- 遗忘用户名: 更糟的是,有时连用户名都忘了,遇上未绑定邮箱的平台,只能重新注册。
- 跨设备难题: 在他人电脑上急需登录账号?我之前的密码管理方案 Keepassxc + NAS 同步就没用了。我不愿将加密的数据库文件(即使是用 AES256 加密)临时同步到别人电脑上,既麻烦又心存顾虑。
解决方案
为了解决安全便捷的跨设备访问这个核心需求,我找到了 Vaultwarden。它是 Bitwarden 密码管理器的轻量级、API 兼容的 Rust 实现,完美适配自建需求,尤其适合部署在我的 NAS 上。
开始部署
参考Vaultwarden中文Wiki,使用Docker Compose部署到NAS:
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
# DOMAIN: "https://vaultwarden.example.com" # 使用反向代理时必填;您的域名;Vaultwarden 需要知道它是 https 才能正确处理附件
SIGNUPS_ALLOWED: "true" # 创建账户后,使用 "false" 停用此选项,这样就不会有陌生人注册了
volumes:
- ./vw-data:/data # : 前面的路径可以修改
ports:
- 11001:80 # 您可以将 11001 替换为您喜欢的端口
拉取镜像成功!部署成功!皆大欢喜!
验证安装
进入浏览器,输入 http://<你的NAS_IP>:5003
访问Vaultwarden 的web界面
于是不出意料的出现意外了,进入页面之后一直在转圈
日志分析
等待许久,还在转圈,查看容器日志,一切正常,没有看到任何异常的日志,最终在浏览器的控制台找到了问题的原因
WebCryptoFunctionService. Could not locate Subtle crypto.
当遇到这个错误时,通常是因为你的应用程序无法找到 SubtleCrypto 接口。这个问题通常发生在没有使用 HTTPS 。Vaultwarden只能使用https访问,但是直接用https访问的话是进不去的,需要ssl证书,此时来到我面前的就有两种方案,第一种是本地自签证书,这样就可以本地使用https访问了,第二种方案是直接用cloudflare的tunnel做内网穿透,实现最低成本稳定暴露到外网。关键数据全程SSL加密,比自建FRP省了服务器钱还不用操心DDoS防御。我本来的需求就是不安装任何客户端就可以访问密码,那自然是使用第二个方案。
问题解决
关于使用cloudflare的tunnel做内网穿透的具体教程,后面有时间会细写,这里就不赘述了。内网穿透做好之后,需要修改docker compose的相应配置文件
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
DOMAIN: "自己设置的域名" # 使用反向代理时必填;您的域名;Vaultwarden 需要知道它是 https 才能正确处理附件
SIGNUPS_ALLOWED: "true" # 创建账户后,使用 "false" 停用此选项,这样就不会有陌生人注册了
volumes:
- ./vw-data:/data # : 前面的路径可以修改
ports:
- 11001:80 # 您可以将 11001 替换为您喜欢的端口
重新部署之后,使用自己设置的域名访问,成功进入,注册管理员账号后完成。
默认评论
Halo系统提供的评论