Bitwarden Letsencrypt

  



Letsencrypt

  1. Bitwarden On Premise Install
  2. Bitwarden Install Letsencrypt
  3. Bitwarden Let's Encrypt Password
  4. Bitwarden Without Docker

Ok, just to rule stuff out. Try the following. Docker run -v /bw-data/:/data/ -v /etc/letsencrypt/:/ssl/ -it ubuntu bash See if that works, and if you can ls those folders inside the container (you will be in the container right after it has started). You can either choose to use letsencrypt or a self-signed openssl-cert. Letsencrypt will only work, if your service will be exposed publicly. Also, letsencrypt is fairly easy to setup, so I will focus on a self-signed openssl-solution. First, we’ll need a “virtual” certificate authority (CA) that will actually sign our certificate later.

  • Bitwardenrs will not work on Chrome without SSL, so we are going to create a self signed certificate. If you are going to host Bitwarden on the internet (outside your local network), use certbot instead. Prerequisites: working Docker installation on Linux As sudo or root, make persistent data directories for SSL and Bitwarden files on.
  • When I found out about Bitwarden, I realized it was the perfect combination of LastPass and KeePass: open-source and self-hostable. Rather than deploying the official Bitwarden docker container, I opted to depoy Bitwardenrs instead. Bitwardenrs is a lightweight version of Bitwarden that is developed in Rust and uses SQLite as the backend.
  • Bitwarden will store all the passwords/passphrases you use for all websites in its vault. The vault will have a master password, which is the only one you will remember, preferable a strong passphrase.

Install Docker

Add user(s) to the docker group. The default user would be pi. However, I highly recommend deactivating the default user.

Reboot and then test docker

Install more dependencies

Fight With SSL

This is the most annoying part of the story. You can either choose to use letsencrypt or a self-signed openssl-cert. Letsencrypt will only work, if your service will be exposed publicly. Also, letsencrypt is fairly easy to setup, so I will focus on a self-signed openssl-solution.

First, we’ll need a “virtual” certificate authority (CA) that will actually sign our certificate later. If you already have a CA, you can skip this. The first command creates a private key, the second command creates the root certificate of our CA.

Now, we’ll need to create a “client” key and a certificate signing request, which will then be “sent” to our CA.

For the actual signing, we’ll also need an extension file. I ran into problems with OSX and iOS without adding the used extensions during signing. Neither OSX, iOS nor Google Chrome accepted the certificate without those extensions. Create a file openssl.cnf

Bitwarden On Premise Install

Bitwarden Letsencrypt

Replace <hostname> and <ip> with your actual values.

Finally, the actual signing:

The certificate you’ll need to deploy on your devices is the root certificate. Yes, this will also work on iOS.

Install/Configure Bitwarden

Bitwarden_rs letsencrypt

We’ll use the bitwarden_rs docker container. It uses sqlite instead of MSSQL, which is not available for ARM.

If docker successfully downloaded the image, you can run it as follows. I simply created a small bash script.

The ROCKET_TLS argument tells bitwarden, where it can find its key and certificate. The values describe paths within the docker container. For these paths to work, we’ll need to supply a volume mapping (-v). The additional volume mapping bw-data is a volume for bitwarden to store its actual sqlite “database” in. Internally, bitwarden will bind to port 80. Since we know/hope it’ll run SSL, we can map internal port 80 to 443.

If everything works, you can reach your bitwarden vaults on https://<hostname>

You’ll most likely run into SSL problems. Good luck.

Bitwarden Letsencrypt

Backup

Read this article.

Bitwarden Install Letsencrypt

Debugging/FAQ

Show running docker containers

Bitwarden

Logs and events

Bitwarden Let's Encrypt Password

Run command within a docker container

Netstat (works w/o actual netstat binary in container. Cool, eh!?)

A word on IPv6. Initially, when bitwarden didn’t work during my first attempts, I was confused by the output of netstat. It showed, that the destination socket for https was only bound to tcp6. This shouldn’t be a problem, though, because bitwarden also sets up a couple of iptables rules (# iptables -L). However, if you think it might be a problem on your machine, try the following things in your /etc/sysctl.conf

Bitwarden Without Docker

At one point, I even completely disabled IPv6 via the kernel command line. However, that introduced even more problems.