工欲善其事,必先利其器。使用好的密码管理让你信息更安全,减少密码记忆,提高效率。最开始所有网站和银行卡都是使用通用账号和密码,感觉还挺爽YY,碰到网站就直接输入那个密码就行,后来QQ经常提醒异地登录,才知道其中一个网站密码被泄露了,可以使用同样账号和密码登录我注册过所有网站。太可怕了,后来使用网站名偏移,每个字母向后移2位,163就变成385了,这样每个网站密码都不一样,使用一段时间,发现某些品牌既有网站和APP,会导致记忆错误,经常需要修改密码,太麻烦。后来发现有密码管理器,它直接生成密码保存在加密数据库里,需要使用时候点击软件复制密码就行,这样也非常安全。后来发现许多这样软件,详细优缺点见 https://www.hangge.com/blog/cache/detail_1949.html,就不详述。
使用心得
先介绍个人情况,mac、window、Android、iOS各有一部,偶尔使用window和iOS,安全和多平台同步是最强烈的需求。开始一年,是使用keepass,必须每周手动备份,Android做为主输入密码,其他平台做为查看密码,避免mac、Android同一天新增密码同步冲突。后来研究onedrive实现mac、window、Android实时同步,iOS还需要手动同步,这样碰到需要新增密码不用考虑同步冲突问题。不过后来在Android上经常必须搜索选择账号才能填充,网页填充不智能匹配,需要手动拷贝账号密码,有点烦。后来体验了下safeincloud,和keepass一样,数据库本地存储,通过onedrive或其他网盘同步,多平台体验效果一样,在浏览器上能智能匹配并填充上,在Android上第一次不能匹配,但它会自动把包名和账号绑定上,下次进去智能匹配并填充,这细节上使步骤节省70%,用起来还是非常好,唯一缺点它是俄国人开发的,非开源,是否会把信息同步到他们服务器,敏感信息始终有点不放心。经过研究发现bitwarden,和safeincloud效果差不多,bitwarden它是开源的,默认使用官网服务器存储账号密码,或动手能力较强,可下载服务器源代码进行部署。开源就有很多人监督,账号密码可存放自己服务器,有漏洞会马上修复,这是很安全。所以决定采用bitwarden并架设自己服务器保存账号安全。当然有人会说服务器也不安全,服务器使用阿里支、腾讯云还是比较安全。还有个好处就是可以把私密东西以附件加密形式上传到服务器。
效果图
服务器图
图1
window版本图
图2
搭建环境
万网购买域名:xxxx.xyz
腾讯香港云主机:ubuntu 18.04 (必须大陆外云主机,在大陆域名要备案,较复杂)
服务软件:bitwarden_rc (官网bitwarden使用net和MSSQL,对主机要求较高,bitwarden_rs根据bitwarden编译写,使用sqlite数据,对主机要求不高)
研究以下方案都未成功,特记录碰到困难,避免其他人踩坑
https://www.xpnas.com/mip/25.html (candy不能获取证书,导致进行不下去)
https://uefeng.com/bitwarden-password-server.html (网站搭建成功,但一直创建不了用户,如 https://www.hostloc.com/thread-597921-1-1.html)
https://blog.mynook.info/post/fast-way-to-configure-a-https-site/ (和上面一样,最后原因是未使用https,导致程序不能正常运行)
主要根据上述mynook教程步骤来搭建,但万网域名使用acme一直没办法获取证书,深入讲解搭建成功步骤,避免其他人入坑。
搭建整体思路
购买域名,域名指向云主机,域名申请https安全认证获取证书,搭建nginx服务用于反向代理,把用户输入网址代理到bitwarden服务,bitwarden服务使用docker容器进行启动。全程传输使用https加密传输。
域名配置
上述IP填写你主机IP
证书获取
https://yq.aliyun.com/articles/637307(文章无图,补几张图)
审批通过,会短信通知,把证书下载保存,有2个文件3027402_xxxx.xyz.key、3027402_xxxx.xyz.pem。
docker安装
根据https://www.runoob.com/docker/ubuntu-docker-install.html一步步安装,便可成功,"使用 Shell 脚本进行安装"章节不用看
nignx安装
不要偷懒直接使用apt install nginx安装,这样安装省事,但没有带ssl加密模块。
手动编译安装: https://blog.csdn.net/qq_23832313/article/details/83578836,主要看下载nginx模块安装章节, http://nginx.org/download/选择版本下载,我选择是nginx版本为1.14.0,文中对应版本改成1.14.0
编译nginx ssl模块
https://www.jianshu.com/p/c758492248d4
https://www.jianshu.com/p/92f8e8da820e
配置所有
全程以root账号操作,其他账号也行
cd ~ && mkdir bitwarden && cd bitwarden
pwd# 应当输出 /home/username/bitwarden
准备配置文件
cat >> config.env < SIGNUPS_ALLOWED=true DOMAIN=xxxx.xyz DATABASE_URL=/data/bitwarden.db ROCKET_WORKERS=10 WEB_VAULT_ENABLED=true EOF 准备服务描述文件: cat >> docker-compose.yml < version: '3' services: bitwarden: image: mprasil/bitwarden:latest container_name: bitwarden restart: always volumes: - ./data:/data env_file: - config.env ports: - "6666:80" EOF 全文红色可以自己修改,但多处修改需保持一致 配置反射代理和https 这二货可以同时在nginx.conf配置,需要了解详细内容项见 https://blog.csdn.net/qq_33404395/article/details/80577433 我给出最简单傻瓜方式 1.证书申请完,把3027402_xxxx.xyz.key、3027402_xxxx.xyz.pem拷贝到云主机/root/bitwarden目录下面,如下图 2.把文章尾部nginx.conf配置替换/usr/local/nginx/conf/nginx.conf 3./usr/local/nginx/sbin/nginx -t测试配置是否成功 4.成功后/usr/local/nginx/sbin/nginx -s reload启动nginx 5.进入/root/bitwarden以当前配置启动docker, docker-compose up -d 操作简单命令 docker-compose up -d 以配置 启动docker docker-compose down docker关闭 /usr/local/nginx/sbin/nginx -s reload 重启 /usr/local/nginx/sbin/nginx -s stop 关闭 /usr/local/nginx/sbin/nginx -t 测试配置 启动都成功,进入xxxx.xyz,就会看到图1效果 其他客户端配置 进入软件首页,点击Settings设置自己服务器 进入后看到图2效果 总结配置项如下图 数据备份 很多文章写到上面就完成。但实际应用中,往往需要对数据进行备份,万一主机损害导致数据全部丢失,那很痛苦。备份有很多种方式,比如直接用dropbox脚本上传备份等。正好我有2台主机(亚马逊aws可以免费申请使用一年),master主机提供bitwarden服务,slave主机提供备份。 1.设备master主机免密码登录到slave主机,master主机生成SSH密钥和公钥(已有跳过这步),ssh-keygen -t rsa,一直回车就行 2.把master公钥上传到slave上,实现免密码登录,中间会要求输入slave密码。ssh-copy-id username@slave-server-ip 3.master主机开定时任务,我设置为每周天早上6点30分进行同步,30 6 * * 0 rsync -auz -e 'ssh -p 16666' /root/bitwarden/data username@slave-server-ip:bitwarden/。/root/bitwarden/data是master bitwarden数据目录,16666是slave远程ssh登录端口。 关注扫描下面图片,一种非程序员思想提升思维。 注: client_max_body_size配置文件上传大小 nginx.conf 配置内容如下 #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name xxxx.xyz; rewrite ^(.*) https://xxxx.xyz$1 permanent; location / { root html; index index.html index.htm; } } server { listen 443 ssl; server_name xxxx.xyz; client_max_body_size 500m; ssl_certificate "/root/bitwarden/3027402_xxxx.xyz.pem"; ssl_certificate_key "/root/bitwarden/3027402_xxxx.xyz.key"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; proxy_pass http://127.0.0.1:6666; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }