I want to host a Vaultwarden (or Bitwarden if necessary) instance, but it keeps asking for a domain and a SSL certificate. I dont own a domain and dont want to enable port forwarding on my router to expose it to the outside.
Is it possible to host a instance only internally and access it via the IP or a domain set on my local DNS? How about SSL is it possible and/or necessary?
I am hosting vaultwarden locally (docker) and just don’t use the Webinterface. The Firefox addon and the bitwarden desktop tool work just fine. Also the android app syncs.
You are in luck, I just made this. Https, no reverse proxy needed
proxmox install script for Vaultwarden
https://forum.proxmox.com/threads/a-proxmox-install-script-for-vaultwarden.159510/#post-732319
You can use any domain you like. I personally have an actual domain that I only use inside my network. This way I can get SSL certs from Let’s Encrypt using the DNS challenge which doesn’t require any ports being opened. You can use self signed certs but I would strongly suggest using certs from the likes of Let’s Encrypt.
Here are 2 pages on this subject
https://github.com/dani-garcia/vaultwarden/wiki/Enabling-HTTPS
It’s good to use SSL even if you don’t plan to use it externally. At some point you may change your mind, or you may need to access it via VPN and there may be one hop between your browser and the VPN that will then be in plain text. Plus, not all devices are trustworthy anymore. An Android or iPhone device might have “malware” (including from reputable companies like Google trying to track you for ad purposes but recording unsecured http traffic to do it.) Or a frienday bring a bad device over and connect to your wifi and inadvertently capture that traffic. Lots of ways for internal traffic to be spied on.
Google: “how to create self signed certificate authority on <your workstation OS>”
And if that article doesn’t have it, google: “how to create a domain certificate from a self signed certificate authority”.
It doesn’t have to be a valid external domain, just use “.internal” as the top level domain which is reserved for this kind of thing, like “vaultwarden.internal”. You can also just use IP addresses in the certificate, but I find that less desirable.
Then google: "how to add a trusted certificate authority on <all your OS’s of all internal devices>”. Depending on what web browser you use, you may need to add it there as well. Once the certificate authority is trusted by your devices and browsers, then the domain certificate created by that CA will be as well.
You can set your expiration dates to be far in the future if you want, to avoid having to create new ones often, but be sure to document how just so in 5 or 10 years or so, if it’s still that way, you’ll know how to update them.
Buy an xyz domain for like $1. If you choose a domain that just 9 random numbers its super cheap.
So something like 123456789.xyz
Then setup a SWAG container with DNS challenge. Join vaultwarden into the same docker network as SWAG, then add an entry to your router to point to vaultwarden using a subdomain.
If it’s just a bunch of numbers, why not just use the ip address?
It makes SSL certs insanely easy. $1 a year is worth it to me to not have to deal with self signed certs.
TLS.
While technically you can use TLS with a self signed certificate, it creates additional problems with a public facing service. Only recommended for internal services.
Other than having accept a self signed certificate, what’s the problem to using the ip address? Mine hasn’t changed in years.
SSL
Like others said, self signed or internal only domains work. Really though for the minimal cost of generally less than $20/year you can make it a lot easier by just buying a domain.
From a pure security stance it could be argued that a personally owned CA is more secure than any public one since it’s possible for others to create a trusted cert with a public entity. Cloudflare ends up doing that for any domains you register with them, but that’s really only an issue for things facing the web and using self signed certs will typically cause problems for any pre-compiled client apps you might use.
I set mine up with duckdns and caddy. In duckdns set the ip address to your machines local address. If memory serves, there’s a section in the vaultwarden wiki about using caddy with duckdns
I know the desktop, and mobile apps work without https, however I can’t remember if you can set it up via those apps?
I ran vaultwarden for a couple of years without q certificate, I just couldn’t log into my instance via the browser.
I did saw You could also use Tailscale and use their internal signed certificates. Then you can access it both internally and remotly over Tailscale with SSL.
Personally I own a domain for years and just use it.
Good question. You could set a domain name point to your IP in your router. That has different names, might be hosts-file or just buried somewhere in the DNS settings of the router. Or machinename.local or .lan works. That should give you some internal domain name, valid inside of your network / wifi.
Getting proper certificates without exposing anything is tricky. If that’s really needed: You’d either generate a self-signed certificate manually and import that onto your devices. Or you need to do some trickery with letsencrypt’s DNS challenge. That’s not super easy, but possible: https://m.youtube.com/watch?v=qlcVx-k-02E
I don’t use Bitwarden. There might be another specific solution to do it.
Self signed certs will work. You can Google how to set them up.
Reverse proxy + LetsEncrypt + DuckDNS + DNS rewrite to point it at local IP is all you need. Works quite well for all my services.
I prefer Keepass as it is less faff as a password manager is too critical to host like this imo.