bitwarden本地搭建(无需购买SSL证书)

在安装之前,笔者在这里先声明一下,我安装bitwarden使用的操作环境为ArchLinux,我的想法是,因为这只是一个“密码本”,并且最好能保证其能够在开机后占用尽量少的内存让密码本保持稳定运行。在此前提下,我选择了干净整洁的ArchLinux,关于其安装,大家可以看一下网上现有的教程,或者也可以看一下我的另一篇文章,
https://www.cnblogs.com/Thato/articles/18309473

Arch的安装不能说简单,但是也绝对说不上很难。关于完全安装完毕后的占用,我压到了350MB的运行内存占用,如下图,可以说是占用十分的少了

如果你不喜欢用或者不用Arch,也没有关系,本篇文章主要的分享目的是自签SSL证书使用https服务的流程,因为bitwarden强制要求运行在此环境下以保证密码安全,而自签既能剩下一笔资金,也能保证我们能够使用安全的bitwarden服务

那么接下来,是我们安装bitwarden要用到的软件

  • VMware虚拟机
  • Arch Linux操作系统
  • docker
  • docker compose
  • Nginx => 用于反向代理和加载ssl证书
  • 一个能用的代理 => 主要是拉docker镜像用,如果你有好的镜像源,其实这个就无所谓
  • 一个清醒的大脑
  • 一杯茶或者咖啡

docker与docker-compose的安装

安装docker

docker的安装我们可以直接使用

pacman -S docker

来安装,如下:

此时按下回车确认安装即可;当安装完毕后,我们可以再使用命令开启docker的守护进程并且设置开机自启

systemctl enable --now docker

当出现如上提示时,docker就启动完毕且添加开机自启了;检查一下docker服务是否正常,运行命令

docker version

当docker如上显示出Client和Server的信息后,说明docker安装设置完毕。

安装docker-compose

对于Arch来说,docker-compose可以直接使用pacman来安装,运行命令

pacman -S docker-compose

安装完成后执行命令

docker-compose version

当能够成功返回版本信息时,说明docker-compose也安装完毕了

bitwarden的安装

我这里使用了一个第三方的bitwarden的docker镜像,听别人说有解锁一些专业版的东西,这里就拿来用了。

加速docker下载

由于各种各样的原因,我们直接使用官方拉取镜像的时候多半情况不是很慢就是连接不上,为了解决这个问题,我这里给出一个可行的解决方案:调用物理机的代理程序

草图大致如上,我的天,好丑,哈哈哈哈。将就看一下,大致就是这个意思。

那么我们如何实现呢?

首先找到代理程序上关于“允许局域网连接”的选项,这里给出小猫和小V的示意图,大家可以任选一个软件去用,当然,有自己的用自己的也行,只要允许局域网连接即可。

随后记住端口号,这里我就用小猫了,记住端口号7890

之后打开VM,和控制面板,结合看一下NAT模式的网卡地址

可以看到我这里是192.168.131.1,那么结合刚才的端口号和网卡的地址。我们要访问的代理地址就是192.168.131.1:7890;访问192.168.131.1:7890即可映射到物理机的7890端口使用代理,这里各位根据自己的实际情况去更改即可。

拿到代理地址之后,配置docker,使其走代理,依次运行命令

mkdir -p /etc/systemd/system/docker.service.d
touch /etc/systemd/system/docker.service.d/http-proxy.conf
vim /etc/systemd/system/docker.service.d/http-proxy.conf

在vim编辑的文件中添加如下条目

[Service]
Environment="HTTP_PROXY=http://192.168.131.1:7890/"
Environment="HTTPS_PROXY=http:// 192.168.131.1:7890/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

保存后重启docker

systemctl daemon-reload
systemctl restart docker

此时docker加速就配置完成了,接下来我们来拉取镜像

拉取镜像&创建实例

运行命令

docker pull bitwardenrs/server:latest

拉取大佬用rust写好的bitwarden docker镜像

可以看到主机侧代理成功获取到了请求,并且docker已经开始使用主机侧代理拉取镜像了,此时我们等待镜像拉取完毕即可,镜像拉取过程的速度因网络状态而异。

当出现如上提示信息时,说明成功拉取完毕了镜像。随后我们来起一下容器,运行命令

docker run -d --name bitwarden -v /bw-data/:/data/ -p 8080:80 -e WEBSOCKET_ENABLED=true -p 3012:3012 -e DOMAIN=https://passwordserver.com bitwardenrs/server:latest

当出现如上提示时,我们的容器就启动完成了,使用命令

docker ps -a

看一下创建好的容器

如上,如果STATUS栏中如果显示Up xxxx seconds (health: starting)或者是Up xxx miniuts (health: starting)之类的时间信息,就没有问题。

//我之前使用CentOS 7安装,容器一启动STATUS状态就会秒Exit,有解决的同志们可以踹我一脚,我学习一下,感谢。

简单检查(此时bitwarden服务不可用,只是检查是否能够正常访问)

注意:此时bitwarden服务并不可用,只是检查是否能够正常访问

随后我们去访问一下web页面,看看是否有异常;访问之前需要知道我们的虚拟机ip地址。这里可以安装一个net-tools,运行命令

pacman -S net-tools #当然,你也可以使用ip a命令来查看ip地址

安装完成之后就可以使用ifconfig了,我们使用ifconfig来看一下ip地址

可以看到我的ip地址是192.168.131.151,并且启容器的时候我们是把docker的80端口映射到了Arch的8080端口上,所以这里我们要访问的地址就是

http://192.168.131.151:8080

尝试访问

可以发现我们的bitwarden服务已经搭出来了

但是,请注意!正如我本小节开头所说,此时服务并不可用,因为bitwarden要求强制使用https才能够进行操作,如下

很多同志可能就是卡在这一步了,上网搜索SSL证书的获取,大都是关于“先注册域名然后就可以免费申请一个SSL证书”之类的回答;但是注册域名也不是免费的,为了解决这个问题,我们可以自签一个SSL证书出来,随后就可以使用bitwarden的服务了。

关于自签SSL证书,你必须要知道的几点:

1. 完全免费,证书时长完全自定义

2. 完全能够保证bitwarden可用,即自签证书能够运行https服务

3. 自签证书不属于“受信证书”,如果你是公网服务,请老老实实注册域名使用受信证书

4. 浏览器会报一个警告,由于不是受信证书,但是我们服务可用就行了,这个不用管;所谓的“不安全”并不是你的密码不安全,web信息传输过程中是会加密的,如下图,我使用自己已经搭建好的另一台bitwarden密码服务器做示例

可以看到数据都是经过TLS加密的,而浏览器提示不安全仅仅是因为你的证书是自签而不是经过权威机构认证的证书,关于安全性这点,请放心。

生成自签证书

这里我们需要两个软件,一个是openssl,一个是jdk11,使用如下命令安装

pacman -S openssl


这里你可以休息一下,喝杯茶或者咖啡,起身运动一下,眺望一下远处,等到下载完毕后再继续安装操作
*
*
*
*
*
*
*
*
*
*
*
休息和安装完毕了吗?我们继续


安装完毕后,我们来继续操作(自签证书的生成参考了文章:
https://cloud.tencent.com/developer/article/1558378
)

首先来生成一个RSA私钥文件,使用命令:

openssl genrsa -des3 -out server.pass.key 2048

运行之后会要求输入一个密码,这里输入一下,会有一次密码输入和一次密码验证。

此密码后续操作中会多次用到,请记好,如果不慎遗忘,请从这步开始重新生成私钥

私钥生成完毕后,我们需要将其中的密码信息去除,让文件中不包含明文密码,执行命令

openssl rsa -in server.pass.key -out server.key

此过程中会让我们输入一次密码,就是刚才的密码,生成的无密码私钥为server.key

无密码私钥创建完毕之后,我们来生成一个CSR(证书签名请求),执行如下命令

openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Hello/L=Guys/O=Like/OU=AndSubscribe/CN=Me.Thank.you.com"

其中,/C=xxx表示的是国家,这里/C=CN即国家是CN;/ST表示省份;/L表示城市;/O表示组织或企业;/OU表示部门;/CN表示域名或IP。这些内容可以完全自定义,些什么都可以,注意不要使用特殊字符

可以看到生成了server.csr,随后我们继续操作,开始自签名操作,运行命令

openssl x509 -req -days 36500 -in server.csr -signkey server.key -out server.crt

其中比较重要的参数是days,这个是证书的有效时间,这里我们既然是自签证书,可以狠心一点,直接签个100年的出来。

可以看到成功输出了crt,自签完成。随后我们把这个证书放到ssl目录中,依次运行如下命令

mkdir -p /usr/local/ssl
cp server.key /usr/local/ssl/
cp server.crt /usr/local/ssl/

移动完成之后我们来继续操作,配置Nginx

使用Nginx反向代理配置https

现在我们有了证书了,该如何使用呢?难不成进到容器里面替换吗

其实完全不用,我们只要配置Nginx设置反向代理即可

首先来安装Nginx,使用命令

pacman -S nginx

安装完毕后运行如下命令

systemctl enable --now nginx

此处我们Nginx就配置完成了,随后我们来设置反向代理

修改配置文件/etc/nginx/nginx.conf,运行命令

vim /etc/nginx/nginx.conf

在其中修改如下内容(注意,一定要在规定的地方去改)

在http中添加:

	types_hash_max_size 4096;

将sever中的内容修改为(Server中error_page上面相关的参数项全部移除即可):

	listen 80;
	server_name passwordsever.com;
	# Allow large attachments
	client_max_body_size 128M;
	location / {
		proxy_pass http://localhost:8080;
		proxy_set_header Host \$host;
		proxy_set_header X-Real-IP \$remote_addr;
		proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto \$scheme;
		}
	location /notifications/hub {
		proxy_pass http://localhost:3012;
		proxy_set_header Upgrade \$http_upgrade;
		proxy_set_header Connection "upgrade";
		}
	location /notifications/hub/negotiate {
		proxy_pass http://localhost:8080;
		}

	listen 443 ssl;
	ssl_certificate /usr/local/ssl/server.crt;
	ssl_certificate_key /usr/local/ssl/server.key;

配置完成之后保存文件,随后依次运行下面的命令

nginx -t
nginx -c /etc/nginx/nginx.conf
nginx -s reload

此时就配置完成了

正式访问bitwarden

我们来试试访问我们的bitwarden,此时我们已经配置好了https,此时访问
https://xxx.xxx.xxx.xxx
(你的服务器ip地址)即可

浏览器爆如上错误直接继续访问,此处的“不安全”原因上面已经强调过,不再赘述

可以看到此时成功进入网页了,那么我们开始使用吧。

创建一个新账户,点击创建账号

这里根据提示填写即可,主密码就是登录进bitwarden的密码,请一定牢记账号和密码

注册完毕即可登录

此时,你的bitwarden就搭建完毕了,关于bitwarden的使用,大家可以自行探索。

恭喜你走到了这一步!

标签: none

添加新评论