Handshake failed on Android 9.0 (Galaxy S8) for selfhosted installation

I have a selfhosted Bitwarden installation running in a docker container on my NAS (VaultWarden, previously BitWarden_RS).
The docker installation itself is not using any SSL certificates or configuration, but I am using my NAS’s reverse proxy to be able to access it over SSL, which uses my NAS’s certificates from Let’s Encrypt.
I have 2 phones, one is a Realme X50 Pro, and the app and web-access is working flawlessly there.
The second phone is an old Samsung Galaxy S8 (Android 9), and here the app refuses to login with an error “Handshake Failed”, while using the same URL on browser on that device doesn’t give any certificate errors whatsoever.
Both are using Bitwarden 2.15.0.
The certificate is managed by my NAS itself (Synology):

Ofcourse, when using non-HTTPS connection, it works but it won’t be accessible from the internet that way (my router doesn’t allow it, and that would be a very bad idea anyway)

I don’t understand why the app refuses to login on my S8 on HTTPS, but it works fine on web-access and on my other android device.

Any help is appreciated.


But my installation is not using a selfsigned certificate, but a properly issued certificate from LetsEncrypt.
Browsers on the same device also accept the certificate just fine when browsing to the web-vault on the same URL.

Did you install just the CA cert from LE, or did you install the full chain cert? LE recently updated their root certificate, so that may be the cause.

The certificate is managed by my Synology NAS, which serves as the certificate for the BitWarden server (in a docker container) via a reverse proxy. The docker container itself does’t have any certificates and runs on a http port.

Maybe I’m misunderstanding what you mean, but I shouldn’t need to install any CA certificates on the device itself since according to LE’s own documentation, Android 9.0 is plenty of recent enough to support their newer certificate chain and cross-signing (Production Chain Changes - API Announcements - Let’s Encrypt Community Support (letsencrypt.org))
Also, on the same device, chrome, edge and Samsung’s Internet Browser happily open the URL and indicate it being a valid certificate. It’s only the BitWarden app that is refusing to accept it as far as I can tell.
Now, I don’t know if these browsers on Android use their own certificate store for certificate validation and that that’s the reason they work fine (afaik, only Firefox uses its own certificate store).

I would check your device to be sure that you don’t still have the expired LE root certificate on it. This has happened to some, and deleting the expired cert fixed their issue. If your server works fine for browsers, it sounds like a device-specific issue.

Indeed, the expired DST Root CA X3 certificate was still in the OS’s certificate store, but the new one ISRG Root X1 is there as well, so as far as the OS is concerned, the certificate-chain is valid (‘my certificate’ ← R3 ← ISRG Root X1).
‘Turning off’ (there is no delete) the DST Root CA X3 certificate didn’t help.

Side node, my more recent Android 11 device also has both DST Root CA X3 and ISRG Root X1 root certificates in its store, and the issue doesn’t occur there.

I’m at a loss.

Sorry that it didn’t work. Worth a shot.

And despite that both root certificates were present, others have reported that deleting/disabling the old one fixed their issue. I had hoped it might work for your phone, also.

Hi @laibalion . I’ve been struggling with this for a few hours. Maybe you’re in the same boat - I’m using vaultwarden on a synology NAS and in the Security/Advanced, I have set the TLS/SSL Profile Level to Intermediate compatibility - this is related to the set of ciphers that would be used. This did the trick for me.

I forgot about this a bit. But yes, I found the issue and could ‘fix" it.
The problem was that Synology’ s webserver has 3 compatibility levels: modern, intermediate, legacy (or something named like this). In Modern compatibility, the webserver uses only modern ssl cyphers, which don’t work with the S8’s android version. Setting it to intermediate, should make it work.
However, be aware that setting the compatibily to intermediate, does lower the security a bit by allowing older cypher suites.
Hope this info helps.