文章

NodeWarden:零成本自建密码管理服务的终极方案

NodeWarden:零成本自建密码管理服务的终极方案

我前阵子整理了一下自己的网络账户,数了数超过600个,然后就开始慌了——这些密码我都是怎么管的?说实话,和大多数人一样,之前就是让浏览器帮我记。Chrome保存、Edge保存、Safari保存,看起来挺方便的对吧?但认真研究了一下浏览器密码管理器的安全性之后,我发现这玩意儿简直是在裸奔。

浏览器密码管理器到底有多不靠谱

先说方便的地方:自动保存、跨设备同步、自动填充、完全免费,听起来很美好?但问题在于:

Reddit上有个帖子讲了一件事——有人在Chrome里存了600多个账号密码,开了跨设备同步,然后听说有人Chrome被黑,加密货币全没了,开了2FA都没用,黑客照样改密码把你锁在外面。这听起来像危言耸听,但技术上完全可能。

浏览器的密码存储本质上就是一个本地数据库文件。Chrome用操作系统的凭据管理器加密,但只要你登录了系统,Chrome就能解密。任何能访问你系统的恶意软件,理论上都能把你存的密码全导出来。

跨设备同步就更刺激了——你的密码存在云端,Google、Microsoft说用了强加密,但密钥在人家手里不在你手里。账号一丢,所有同步的密码全暴露。

还有一个根本性的缺陷:浏览器密码管理器只能在浏览器里用。你电脑上的Steam、微信、各种开发工具,手机上的App——这些的密码浏览器完全管不了。结果就是要么手动输,要么所有账户用同一个密码,这他妈比不管理还危险。

所以专业的密码管理器就出来了:1Password、Bitwarden、LastPass……安全性更强、跨平台、功能更丰富,但这些服务要么收费要么免费版功能受限,垃圾佬总觉得差点意思。

Passkey和TOTP:浏览器又一块短板

还有两个现代认证技术得提一下,因为它们进一步暴露了浏览器的无能。

Passkey

Passkey 示意图

Passkey(通行密钥)基于FIDO2/WebAuthn标准,核心思想是用密钥对代替密码。注册时设备生成一对密钥,私钥存本地公钥给服务器;登录时服务器发挑战,设备用私钥签名,服务器用公钥验证。整个过程密码从不在网络中传输。

这东西比密码安全在哪?抗钓鱼(和域名绑定,钓鱼网站没法伪造)、不可重放(每次签名不同)、无需记忆(生物识别搞定)。Google、Microsoft、Apple、GitHub、Cloudflare、Amazon全都支持了,已经是成熟标准。

TOTP

TOTP 示意图

TOTP(基于时间的一次性密码)就是大多数”验证器App”用的技术,基于共享密钥和当前时间生成6位验证码。比短信验证码好在不依赖网络、无法被拦截、所有验证器App都兼容。

浏览器呢?

Chrome的Passkey支持仅限于Google账号同步的Passkey,跨平台别想;TOTP功能Chrome压根没有。而Bitwarden、1Password这些专业选手两种都完整支持还能跨平台自动填充,差距不是一般的大。

Bitwarden与Vaultwarden

说到密码管理器,Bitwarden是绕不开的名字。

Bitwarden Logo

完全开源、跨平台(Windows/macOS/Linux/iOS/Android/浏览器扩展)、功能完整(密码存储、TOTP、Passkey、文件附件、安全笔记)、端到端加密,该有的都有。但官方服务收费,个人高级版$10/年,家庭版$40/年。对企业来说不算什么,对垃圾佬来说……

Vaultwarden(原名Bitwarden_RS)就是来解决这个问题的——用Rust写的非官方Bitwarden服务器实现,让你自建Bitwarden服务,免费使用高级功能:

功能 支持
个人密码库
Send 安全分享
文件附件
网站图标
组织/团队
多因素认证
紧急访问

几乎所有Bitwarden付费功能都支持,而且兼容Bitwarden API,直接用官方客户端就行。

但Vaultwarden有一个根本性的问题:你得自己部署和维护。需要服务器、需要保证数据安全、需要7x24小时运行、需要安全配置。对技术宅来说不是问题,对普通用户简直是噩梦。更要命的是,服务器挂了、数据丢了、被黑了——所有密码全没了。

所以问题变成了:有没有一种方案,既能自建又不用运维服务器?

Cloudflare:赛博菩萨的免费午餐

答案在Cloudflare。这家公司被戏称为”赛博菩萨”不是没有道理,大量免费优质服务,而且组合起来恰好能解决我们的问题。

Workers:无服务器计算

Cloudflare Workers是无服务器计算平台,写代码不管服务器,代码在Cloudflare全球边缘网络跑。免费额度每月10万次请求,每次10ms CPU时间,个人密码管理完全够用。

D1:SQLite数据库

D1是Cloudflare的SQLite数据库服务,专为Workers设计。免费额度5GB存储、500万行读取/天、10万行写入/天。密码数据主要是文本,我自己的密码库600多条导出后才几百KB,5GB绰绰有余。

R2:对象存储

R2兼容S3 API,免费额度10GB存储、100万次A类操作/月、1000万次B类操作/月,最关键的是流量免费,无限上传下载附件不用担心费用。

如果Vaultwarden能跑在Cloudflare上,那就完美了——零成本、高可用(Cloudflare全球网络99.99%+可用性)、零运维、数据安全级别比自己搭的服务器靠谱多了。问题是:Vaultwarden能跑在Workers上吗?

不能。

NodeWarden

NodeWarden就是干这个的——一个运行在Cloudflare Workers上的Bitwarden第三方服务端,兼容官方Bitwarden客户端,免费、零运维。

功能对比

功能 Bitwarden NodeWarden 说明
Web Vault 网页端密码库管理
文件夹/收藏 常用管理能力
全量同步 已做兼容与性能优化
附件上传/下载 R2和KV二选一
导入导出 完整实现,含密码库+附件ZIP导入
网站图标代理 自动获取网站图标
Passkey、TOTP 完全支持,无需高级版
Send 安全分享功能
多用户 完整用户管理,邀请机制

客户端支持:Windows ✅、手机App(iOS/Android)✅、浏览器扩展(Chrome/Firefox/Edge/Safari)✅、Linux ✅、macOS ⬜(未测试,理论上可用)

部署有多简单?

  1. Fork NodeWarden的GitHub仓库,顺手点个Star
  2. 打开Cloudflare Workers控制台,选择”Continue with GitHub”,选你Fork的仓库,下一步默认用R2存储,没开通R2(需要绑卡)就切换KV,点击部署
  3. 几分钟后服务上线,Cloudflare给你一个.workers.dev域名,也可以绑自己的域名

存储方式对比:

存储 是否需绑卡 单个附件上限 免费额度
R2 需要 100 MB 10 GB
KV 不需要 25 MB 1 GB

有信用卡推荐R2,没有的话KV也够用。

习惯命令行的话也可以CLI部署:

1
2
3
4
5
6
git clone https://github.com/shuaiplus/NodeWarden.git
cd NodeWarden
npm install
npx wrangler login
npm run deploy        # R2模式
npm run deploy:kv     # KV模式,无需信用卡

多用户

第一个注册的用户自动成为管理员,管理员可以在管理页面生成邀请码,其他人凭邀请码注册。可以和家人朋友共享这个服务。

数据备份

Cloudflare可靠性极高,但数据安全无小事。NodeWarden支持在客户端导出密码库为JSON文件,建议定期备份。支持的导入格式:Bitwarden json/csv、密码库+附件zip、NodeWarden密码库+附件json(含加密模式)。还支持直接导入Bitwarden密码库+附件zip,这条路径官方Bitwarden Web暂不支持。

算一笔账

  • 1Password:个人版$2.99/月=$35.88/年,家庭版$4.99/月=$59.88/年
  • Bitwarden官方:个人高级版$10/年,家庭版$40/年
  • 自建Vaultwarden:VPS $24-100+/年 + 域名$10/年 + 时间成本无法估量 + 数据丢失风险
  • NodeWarden:$0,运维成本0,可靠性Cloudflare级别

对于我们垃圾佬来说,选择显而易见。零成本、零运维、高可用,完全开源代码可审计,加上Cloudflare的全球网络和安全能力,密码数据比放在任何自建服务器上都安全。

几点提醒

  1. 主密码很重要——NodeWarden端到端加密,只有你的主密码能解密,忘了就没了,务必妥善保管
  2. 定期备份——Cloudflare很可靠但数据安全无小事,建议定期在客户端导出备份
  3. 免责声明——NodeWarden是第三方实现,与Bitwarden官方无关,遇到问题去GitHub Issues反馈,别骚扰Bitwarden官方
  4. 数据归属——数据存在Cloudflare服务器上,Cloudflare值得信赖,但如果你对数据主权有极高要求,可能需要考虑其他方案

数据安全无价,但保护它不一定需要花钱。感谢shuaiplus开发出这么棒的项目并开源分享,如果对你有帮助别忘了去GitHub点个Star。从现在开始,我的密码不需要任何服务器了!!

本文由 唐玥璨 版权所有