序言
Bitwarden 在心里种草好久了,毕竟把自家的密码放在自己家里能安心一点嘛(Keepass 是啥)
结果上网一翻教程嘿,还得花钱买 SSL 证书的,要不然就得在 Let's Encrypt 反复来回申请证书(关键是,还要一个域名,我可不想跑去备案…),给我整得差点弃坑不玩了
但是呢,种草的东西不弄一份怎么行呢?乖乖回来研究,结果部署过程中主要难度出在自签名证书这里了。当然,后续配置 WebSocket 服务之类的也花了一些工夫,但那倒是没什么关系啦
都搞好了以后,反而想买个域名了……所以下一步打算就是把服务器配置到固定的域名上,而不是像现在一样配置到 ip 上,这样等 ip 地址到期就不必重新配置一遍了
先是一个大致的目录,说明一下要做什么:
- (推荐)安装 Docker 版 Portainer,方便后期管理各 Docker 容器
- 生成自签名证书
- 申请一个邮箱(推荐 outlook),用来给 Bitwarden 的服务端发邮件用
- 安装 Docker 版 Bitwarden,即 vaultwarden/server
- 安装 nginx,做好 WebSocket 服务器相关的配置
Portainer
这段命令是从网上抄的,原文地址……忘了(其实如果不是为了备案,我也不会跑来写博客呢)
docker run -d -p 9000:9000 -name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /share/CACHEDEV1_DATA/Container/Docker/portainer_data:/data portainer/portainer
这里注意一下端口的设置,前面那个 9000 是服务器的端口,可以按需要修改,后边的 9000 就不要动了
还有就是,后面的映射路径
/share/CACHEDEV1_DATA/Container/Docker/portainer_data
可以按需要修改
生成自签名证书
这个……是从外面抄来的方案,我都不知道怎么做到的,但它就是能用哈哈哈
安装 OpenSSL
在 Windows 系统就可以了,下载 OpenSSL 的 Win64 版本,安装,配置环境变量
PATH: C:\Program Files\OpenSSL-Win64\bin
在 cmd 中敲 openssl 看一下配置成功没有
编写配置文件和脚本
把以下三个文件放到一个文件夹里:
server_rootCA.csr.cnf
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[dn]
C=CN
ST=A
L=A
O=A
OU=local_RootCA
emailAddress=.
CN = 服务器域名或ip地址
v3.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
IP = 服务器域名或ip地址
do.bat
openssl genrsa -out server_rootCA.key 2048
openssl req -x509 -new -nodes -key server_rootCA.key -sha256 -days 36500 -out server_rootCA.pem
openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config server_rootCA.csr.cnf
openssl x509 -req -in server.csr -CA server_rootCA.pem -CAkey server_rootCA.key -CAcreateserial -out server.crt -days 36500 -sha256 -extfile v3.ext
运行脚本,生成证书
运行 do.bat,会要求输入一次信息,这里就随便编一个虚假的机构名就可以了(比如 MiaoMiaoMiao),不用填 ip 地址或者域名啥的
生成的文件有 5 个,server.crt 和 server.key 这俩是要拿给 Bitwarden 用的,留给下一步备用
server_rootCA.pem 复制到 Android 上,导入 CA 证书
server_rootCA.pem 重命名为.cer,在 Windows 上,导入受信任的根证书颁发机构
这样等下配置好的 Bitwarden 就可以和客户端通信了
安装 Bitwarden
到这就简单啦,跟着我的配置来吧
申请一个邮箱用来给 Bitwarden 发邮件用,outlook 的就很好
在 Container Station 里面选 Create,然后搜索 vaultwarden/server,点 Install
安装配置
文件夹映射
先配置一下映射的文件夹,把容器的/data 映射到随便什么地方就好了,比如,我的配置是:
左边/Container/bitwarden_data(这个文件夹你得先在 File Station 里面创建好),右边/data
环境变量
在环境变量选项卡中,加入以下这些环境变量:
其中,DOMAIN 这个就只有一个用处,就是系统给你发邮件的时候,它把这个变量写在链接里,所以就算暂时配置不好也完全没关系(比如你正在备案域名?),之后再改也完全来得及
ROCKET_TLS 这里面就是存放服务器证书的地址,还记得之前做的 server.key 和 server.crt 吗?按照我上图中的环境变量配置,我就要在刚才创建的 bitwarden_data 文件夹中再建一个 cert 文件夹,然后把这俩放进去
网络端口
把 3012 端口映射到 3012,把 80 端口映射到随便哪个空闲的端口,比如说 236
都放好以后,就点 Create,然后等它下载映像,安装,启动就可以了
nginx
也是在 Container Station 里面就可以,把网络设置改成 Host 模式,文件夹映射的话加上这个:
/etc/nginx 映射到 /Container/nginx
安装就行了
安装后它启动不了,因为还需要在/Container/nginx 里面放一个 nginx.conf
内容大概这样就可以了:
user nginx;
worker_processes 1;
error_log /etc/nginx/error.log warn;
pid /etc/nginx.pid;
events {
worker_connections 1024;
}
http{
server {
listen 235 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1 SSLv3;
ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:DES-CBC3-SHA:HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP;
ssl_prefer_server_ciphers on;
client_max_body_size 128M;
location / {
proxy_pass https://127.0.0.1:236/;
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://127.0.0.1:3012;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /notifications/hub/negotiate {
proxy_pass https://127.0.0.1:236;
}
}
}
这里面 ssl_certificate 和 ssl_certificate_key 两处配置,就自己把之前申请的证书放进去就可以了
端口的问题上,我这里是监听了 235 端口,实际使用上,在 Bitwarden 的客户端里也填https://ip:235就可以了
齐活
后面就是一些细节性的,比如说把证书文件藏好,别泄露出去啊,什么的
https://ip:235/admin 是管理员页面,密码就是之前设置的 ADMIN_TOKEN 环境变量