Bitwarden, un autre gestionnaire de mots de passe

Depuis que je suis passé au gestionnaire de mots de passe, je n’ai jamais vraiment été totalement satisfait par l’ergonomie de Kee, l’extension pour Firefox. C’est alors que je tombe par hasard sur Bitwarden, une autre solution de gestion de mots de passe Libre qui a bonne réputation. Il n’en fallait pas plus pour que je me lance dans un test !

L’offre

Bitwarden propose une solution multi-plate-forme et open source de synchronisation de mots de passe. Elle se compose d’un serveur, sur lequel se trouve le vault, et de différents clients pour tous les OS et navigateurs grand publique.

La société propose une offre gratuite permettant d’avoir un compte chez eux où stocker ses mots de passe, des offres payantes pour les particuliers et des offres pour les entreprises, donnant accès à des fonctionnalités supplémentaires comme le stockage de fichiers (1Go), des moyens d’authentification supplémentaires, la prise en charge des tokens de connexion à usage unique, un support prioritaire… Du très classique, donc.

Auto-hébergement

Vu que c’est open source, il est possible d’installer un vault sur son propre hébergement. Malheureusement, selon ce que j’ai pu lire, la version officielle nécessite pas mal de ressources, la faute à l’utilisation de C#. C’est ici qu’intervient bitwarden_rs, un serveur officieux totalement compatible avec les API officielles, écrit en Rust, et donc vachement plus léger.

Bitwarden_rs

Comme je n’y connais rien en Docker, j’ai demandé s’il était possible de s’en passer pour faire tourner bitwarden_rs. J’ai eu de l’aide de deux personnes assez rapidement, qui m’ont conseillé ceci.

  • Télécharger ce script.
  • Éditer la onzième ligne for cmd in curl jq go; do et supprimer go.
  • Si jq n’est pas installé… l’installer.
  • Exécuter les commandes suivantes:
mkdir dl
cd dl
../download-frozen-image-v2.sh img mprasil/bitwarden:alpine 
for t in img/*/layer.tar; do
    tar xf "$t" web-vault &>/dev/null
    tar xf "$t" bitwarden_rs &>/dev/null
done
rm -rf img

Vous voici avec l’exécutable bitwarden_rs et le dossier web-vault.

Il reste à configurer le serveur en copiant le contenu du fichier de conf exemple dans un fichier .env au même endroit que bitwarden_rs et à le personnaliser selon votre environnement. Pour ma part, j’ai changé DOMAIN pour y mettre l’URL par laquelle j’accéderai au vault, et le duo ROCKET_ADDRESS et ROCKET_PORT pour y mettre respectivement 127.0.0.1 et 8000. Enfin, j’ai aussi renseigné ROCKET_TLS pour le faire pointer vers le certificat SSL et la clé qui va avec, obtenus via Let’s Encrypt.

Il faut ensuite lancer bitwarden_rs en passant par systemd ou Supervisor. Je vous renvoie vers votre documentation favorite pour cette étape, et on passe à la configuration de nginx.

nginx

Sur mon VPS, les requêtes vers ce domaine arrivent toutes sur nginx. Il me faut donc les rediriger vers le serveur bitwarden_rs :

server {
  listen          80;
  server_name     bitwarden.domaine.com;
  location /.well-known/acme-challenge {
          root /var/www/bitwarden;
  }
  location / {
          return 301 https://$host$request_uri;
  }
}

server {
  listen          443;
  ssl on;
  server_name     bitwarden.domaine.com;
  ssl_certificate /etc/letsencrypt/live/bitwarden.domaine.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/bitwarden.domaine.com/privkey.pem;
  location / {
          proxy_pass https://127.0.0.1:8000;
          proxy_set_header Host             $host;
          proxy_set_header X-Real-IP        $remote_addr;
          proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
          client_max_body_size 100M;
  }
  access_log /var/log/nginx/bw_access.log;
  error_log /var/log/nginx/bw_error.log;
}

Et on en a fini avec le côté serveur. Bien sûr, c’est une étape qui n’est pas à faire si vous choisissez d’utiliser les serveurs de Bitwarden.

Le client web

Une fois installé, il faut de se connecter à l’interface web pour y créer un compte. J’ai ensuite procédé à l’import de mes mots de passe stockés sous KeePass. Pour ce faire, il faut d’abord les exporter au format « XML (KeePass v2) ». Attention, ce fichier contient vos mots de passe en clair : à supprimer une fois l’import terminé ! Il faut ensuite se rendre dans l’interface Web de Bitwarden, seul endroit où on peut importer les mots de passe ; ce qui est moyen, vu que seul le chiffrage HTTPS nous protège ici. J’aurais préféré un import depuis le client desktop, avec chiffrement des mots de passe en local, avant de les faire transiter sur Internet… :-/ Une fois l’opération terminée, il reste à synchroniser le reste des devices !

Le client Desktop

Contrairement au serveur, on utilise le client officiel de 8bit Solutions LLC, également open source, basé sur Electron, ce qui le rend plus gourmand en ressources que KeePass. Ce n’est pas dramatique mais toujours bon à savoir.

Vu qu’ils prévoient l’auto-hébergement de leur solution, on peut configurer le client pour pointer vers notre instance. Une fois cela fait, on se connecte sur le compte précédemment créé, et les mots de passe sont automatiquement mis à jour sur le client Desktop.

Les points forts

On va commencer par l’impression générale : c’est plus engageant que KeePass. Ce dernier souffre d’une interface assez austère. Ici, on a une charte graphique dans l’air du temps. Je n’en attendais pas moins de la part d’une appli bâtie sur Electron. C’est plaisant, aéré, et les fonctionnalités principales sautent aux yeux. Raffinement supplémentaire, un thème sombre est disponible !

La synchronisation s’est faite sans encombre, opération qui promet d’être encore plus simple si vous leur faites assez confiance pour prendre un compte chez eux.

Il existe une fonctionnalité de partage de mots de passe au sein d’une « organisation ». Il est ainsi possible de regrouper plusieurs utilisateurs du même serveur dans un groupe avec lequel on partage des mots de passe. Pratique pour le compte de vos courses en ligne à partager avec votre famille, par exemple.

On peut voir sur la capture que Bitwarden est aussi capable de gérer les codes à usage unique : ces codes à six chiffres pour les authentifications à deux facteurs. C’est une fonctionnalité payante mais elle peut être assez pratique à l’usage, je pense, surtout dans le cadre du partage au sein d’une organisation. Par contre, si on accède à votre vault, vous êtes mal, vu que les deux facteurs (mots de passe et code unique) sont au même endroit… à utiliser en toute connaissance de cause, donc. Je ne sais pas si cette fonction est utilisable gratuitement avec un serveur auto-hébergé, je n’ai pas pris le temps de la tester.

Les problèmes

Je n’ai pas testé l’extension Firefox ni l’application Android, car l’essai du client Desktop m’a tellement laissé sur ma faim que j’ai abandonné Bitwarden au bout d’une vingtaine de minutes… Je ne remets pas en cause la qualité de l’architecture ni la sécurité offerte par la solution. Elles doivent être tout à fait honorables, et un audit devrait confirmer la bonne réputation de Bitwarden à ce sujet.

Ce qui m’a totalement repoussé, c’est l’ergonomie générale du logiciel. Face à la masse de mots de passe en ma possession, j’ai décidé de faire le tri. J’ai créé des catégories pour mieux m’y retrouver et j’ai naïvement tenté un glisser-déposer pour assigner une catégorie à l’identifiant. Ce n’est pas possible. Au xxie siècle, sur une application Electron, ne pas gérer le drag’n drop/facepalm Pour affecter une catégorie, il faut cliquer sur l’identifiant et dérouler une combo box permettant de choisir une catégorie. Trois clics pour assigner une catégorie. Trois. /refacepalm

Ensuite, j’utilise pas mal la fonctionnalité de KeePass qui permet de taper automatiquement identifiant et mot de passe sur une autre application. Genre le launcher d’un jeu vidéo, par exemple. Eh bien ce n’est pas supporté. Ça s’excuse un peu plus, vu que KeePass est Windows-only alors que Bitwarden est multi-plate-forme : c’est donc plus compliqué à gérer.

Enfin, j’utilise un plugin pour KeePass, KeeAgent, qui permet d’importer des clés SSH afin de s’authentifier pour des sessions SSH. Ce n’est pas supporté par Bitwarden non plus, et l’absence d’un système d’extension rend la chose totalement impossible pour l’instant. Bon, ce dernier cas est un peu niche, j’avoue, mais j’aurais du mal à m’en passer.

Conclusion

Passé l’agréable premier contact avec le soft sur la charte graphique et la facilité de synchronisation, le manque de finitions de l’ensemble m’a fait revenir très, très vite à KeePass, qui est certes plus austère et qui nécessite un peu de bidouille, mais qui reste imbattable niveau souplesse et fonctionnalités. Oui, il y a des choses un peu bof avec Kee (l’extension pour navigateur), et sur Android, le flux pour entrer un mot de passe est un peu fastidieux, mais au moins, le logiciel Desktop fait bien le travail.

À tester à nouveau dans quelques années, peut-être ! :)