高防服务器

Keepassxc+Keepass2Android+坚果云密码管理方案

前言

目前市面上主流的密码管理软件有很多,包括:1password、lastpass、Bitwarden、Keepass系列等。大都数的软件都会将密码数据存在自己的云服务上(有的也提供自托管存储方案)。就个人而言,相比密码数据存放在第三方服务器上,能够本地存放和管理密码才更令人放心。Keepass 生态中的客户端都是数据本地化存储的方案。本文简单总结使用到的 Keepassxc + KeepassAndroid + 坚果云跨平台密码管理方案。

Keepass 生态

Keepass 是一款开源软件,也可以说是一个生态。正是因为其开源,开源社区基于 Keepass 又开发了一系列客户端,供各个平台使用:

Keepass 系列的优点主要有:

  • 密码数据库默认是本地存储,安全性更加可控(如需要跨平台同步,有额外工作要做)
  • 加密算法安全性足够高,多种加密措施保证密码数据库安全,至今还未爆出安全漏洞(据说)
  • 生态完善,对Windows、Linux发行版、MacOS、Android、IOS等平台均有支持
  • 完全开源免费,使用者众多

本文方案

主要在 Windows 和 Android 平台使用,所以选择 Keepassxc 和 Keepass2Android。

Keepassxc 和 Keepass 对比

  • Keepass 是用 .NET 写的,之前一直只支持 Windows 平台,后来通过 Moon 才支持了 Linux 和 MacOS,现在大版本是 2。Keepass 是用 QT 写的,具有跨平台移植性。
  • Keepass 2.5 和 Keepassxc 2.6.6 都支持 kdbx 4 的数据库格式,所以两者是完全兼容的。用 Keepass 创建的密码数据用 Keepassxc 可以无缝查看和编辑,反之亦然
  • Keepass 界面复古,操作硬核,Keepassxc 对用户更加友好一些。两者都有中文支持,Keepass 需要下载语言包,Keepassxc 内置支持
  • Keepass 支持插件系统,社区也提供了很多免费插件,可以实现各种比较灵活的功能。Keepassxc 没有插件系统。比较有用的功能可能是对 entry 的模板定制,这个 Keepass 可以通过 KPEntryTemplates 插件实现,而 Keepassxc 目前还没有(不出意外的话,2.7 版本会提供)
  • 对浏览器的支持:两者都需要安装浏览器插件,Keepassxc 可直接使用,而 Keepass 自身还需要安装插件。

总的来说,Keepass 功能更加完善灵活,可玩性更高,Keepassxc 更加适合不喜欢折腾的人。鉴于新入坑,且两者数据库无缝兼容,所以先选择 Keepassxc。

使用 Keepassxc

  • 直接去官网下载好安装包(https://keepassxc.org),三个平台都有, MAC 上使用的话也是一个好选择
  • 加密设置比较形象,直接指定一个加密时间。这应该是影响加密迭代次数:时间越长,迭代次数越高,数据越安全(也需要与使用体验权衡),从高级设置也能看出来。没有向下兼容需求,数据库格式选择 kdbx 4.0。

  • Keepassxc 提供三种数据库凭证

    • 主密码:所有密码的密码,一定要足够长和复杂,最好记在脑子里
    • 秘钥文件:这个文件可以是文本,也可以是其他格式的文件(图片,视屏),可以自己提供也可以让 Keepassxc 生成。最重要的是创建了之后,千万不能修改
    • 硬件身份认证设备:没有见过,应该类似U盾

    轻度用户使用主密码,推荐方式是:主密码+秘钥文件

  • 选择好数据库文件存放位置,准备工作就做好了。后面就是根据类别创建群组,再创建密码条目。密码条目的格式是写死的。URL字段用于浏览器自动填充功能,后面会介绍。

浏览器自动填充

核心是 Keepassxc-browser 这款插件。这款插件是基于 chromeIPass 开发的。chromeIPass 是较早用于支持 Keepass 浏览器自动填充的插件。

一个插曲:在多年前,KeePass 的浏览器自动填充方案还是 KeePassHttp+ChromeIPass,后来 ChromeIPass 项目被原作者遗弃,出现了一个新的分支叫 KeePassHttp-Connector。再后来, KeePassHttp-Connector 也停止维护,神奇的是作者推荐使用 KeePassNatMsg+Keepassxc-browser 方案。所以,如果要从 Keepassxc 切换到 Keepass 连浏览器插件都不用换了

Keepassxc-browser 有 Chrome/Firefox/Edge 版本,在各自扩展市场中都能找到,版本跟github上的一致。插件装好之后需要跟本机开启的 Keepassxc 客户端进行连接,连接的时候需要提供一个唯一字符串作为连接 ID。

在插件设置中也能看到创建的连接

连接好之后不需要什么特别的配置就能使用。用户名栏中出现一个钥匙小图标,说明插件生效了,如图:

插件大概的工作方式:KeePassXC-Browser 将页面信息(主要是URL)通过 keepassxc-proxy(Keepassxc 默认已安装) 传递给 Keepassxc。Keepassxc 通过搜索密码条目的 URL 字段,找出可能的密码条目,然后回传给 Keepassxc-Browser 供用户选择填充内容。

当数据库中有浏览器当前页面URL相关密码条目时会弹对话框让我们选择条目,并且插件可以可以记住我们的选择:

填充效果如下图:

关于浏览器自动填充有两点需要说一下:

  • 当我们让插件记住我们的选择时(接受或者拒绝),插件会将标记数据回写到密码数据库中。具体位置在密码条目的属性卡片的插件数据中。如果要修改自己的选择,则需要删掉对应的插件数据,重新加载页面后会让用户重新选择:
  • 有的网站比较特殊,用户名和密码在两个不同页面输入,且域名是不同的(例如登陆一些老的 aws 账号的时候会出现),这时候需要在该条目的浏览器集成卡片的附加域名中填上额外的域名:

密码数据库的跨平台同步

密码数据库本身的安全性是很高的,我们可以将密码数据库文件放到一些支持 webDav 功能的网盘中,就可以跨机器跨平台使用同一份密码数据(前提是客户端都兼容这个数据库的格式),并且有双向同步的功能。

常用的有坚果云和 onedrive,onedrive 个人版的服务器在海外,速度比较慢,这里就选择了坚果云。本机安装坚果云客户端,将新建的数据库文件放到坚果云文件夹下的路径中(或者复制已有数据库过去,然后用Keepassxc重新打开)。这里要注意,最好不要使用中文路径。坚果云会自动将数据增量同步到云端,同时如果云端的数据如有修改,也会及时同步到windows上来。

登陆坚果云网页版,在账户信息 > 安全选项 > 第三方应用管理中生成一个用于授权第三方应用利用 WebDAV 协议访问自己文件的秘钥(账号是自己的坚果云账号)。这个是 Android 平台能够同步密码数据的关键所在。如下所示:

Android 上使用 Keepass2Android

Keepass2Android 功能完善,推荐使用。有一个离线版本,如果不需要进行跨平台同步,可以选择,更加安全。

下载

  • Google Play:这个是最安全的途径
  • Github:国内手机如果不能使用 Google Play,则需要去 github 项目中去下载需要版本的 apk文件
  • Google Play 镜像网站如 apkmirror 等

同步密码文件

打开app,选择打开文件,会有各种文件打开途径,选择 HTTPS(WebDav):

接下来的弹窗中填入上一步在坚果云中创建的 WebDav 信息:

之后app就会将数据库文件同步到本地,并要求输入正确的数据库凭证,之后就可以正常使用

Android 上的浏览器自动填充

Keepass2Android 提供两种途径三种形式来完成自动填充功能(这是我知道的)
注意:以下所有步骤都是在小米8的firefox中测试的,不同平台和浏览器可能有差异。

  • 将 Keepass2Android 设置为自动填充服务
    我觉得这是最简单的一种方式,体验与 Windows 平台上如出一辙,Keepass2Android 自动根据 URL 提供出填充选项,用户只需点击就能轻松完成自动填充

    可惜这个功能不是所有浏览器上都能用,自测小米8只有 firefox 支持这种使用方式,小米自带浏览器/腾讯/edge 等都不行。所以到底行不行,需要实测。
  • 使用 Keepass2Android 键盘

    • 在系统设置中 启用 Keepass2Android 键盘
    • 在用户名输入框时,切换输入法。得到如下效果
    • 点击小机器人会跳转到 Keepass2Android 中,显示匹配的密码条目,点击一条之后,会返回浏览器。得到如下效果(屏幕最下面的键盘,忽略自动填充弹框):
    • 用户名栏点击用户名就能填充用户名,密码栏点击密码就能填充密码。这里需要注意,有的系统带有安全键盘,开启时 Keepass2Android 键盘将无法弹出,所以需要关闭安全键盘(小米8是这样)
  • 使用浏览器的网页分享功能
    需要注意,不是所有浏览器都行的通,自测发现腾讯浏览器不行。
    在需要自动填充的页面点击分享,弹出的框中选择 Keepass2Android 图标,就会跳转到 Keepass2Android 应用中。后面的流程跟使用 Keepass2Android 键盘一样。分享如图:

一些思考

  • 这样一套下来,基本上重要的密码都放在了密码数据库中,那么数据库文件和凭证的灾备措施就显得很重要了。我的规划是:本地存一份(离线时用),坚果云存一份,onedrive存一份。
  • 本地明文存放密码是万万不可取的,没出问题是侥幸,一旦出问题就追悔莫及。科学使用电脑很重要,杀毒软件和防火墙还是老老实实开起来
  • 浏览器保存密码是不安全的(且不论之前有反馈说chrome直接明文存密码),github上有一款工具能直接获取 chrome 上存放的所有填充数据,不需要任何凭证。不管什么浏览器,不要存密码信息,更不要将密码同步到浏览器的云上
  • 效率与安全始终是矛盾体。相比于密码管理的Saas服务,这套方式显得比较繁琐复杂,探索实践也需要花费一番功夫。同样,相比于Saas服务的黑盒,密码数据放在自己手里心里仍然踏实一些(并非说Saas服务更加不安全,更多是个人选择问题)。
  • 随着产生的密码越来越多,心智成本越来越大,不可避免的需要使用安全的掌控性强的可持续的密码管理工具来做系统性的管理。这方面值得持续投入精力去维护,因为一旦用上这些工具会陪伴我们很久。
  • 如果要存放密码到第三方的Saas服务中,可以采用两段或三段式密码:存放在Saas中的是中间一段的密码,实际的密码有装在自己脑子里的固定前缀或者后缀或者两者皆有。这样还是很安全的,不过维护密码有一定的心智成本。

参考文档

  • 如何科学管理你的密码 – 知乎
  • 一劳永逸:KeePass全网最详使用指南 – 知乎
  • 安卓Keepass2Android怎么用?
  • KeePass通过KeePassNatMsg和KeePassXC-Browser实现Chrome/FireFox/Edge自动填充
  • KeePassXC: Getting Started Guide

[温馨提示:高防服务器能助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。]

[图文来源于网络,不代表本站立场,如有侵权,请联系高防服务器网删除]