Aller au contenu
Sécurité medium

Bitwarden : gestionnaire de mots de passe open-source et Secrets Manager

23 min de lecture

Logo Bitwarden

Bitwarden centralise vos mots de passe avec un chiffrement de bout en bout (AES-256). C’est l’un des gestionnaires de mots de passe open-source les plus populaires, avec deux produits complémentaires : le Password Manager pour stocker vos identifiants, et le Secrets Manager pour automatiser la gestion des secrets dans vos pipelines CI/CD.

Imaginez une équipe DevOps qui gère des dizaines de services : bases de données, API tierces, comptes cloud, certificats. Chaque service a ses propres credentials. Comment les partager sans risque ?

Les pratiques courantes sont toutes problématiques :

  • Fichiers texte partagés — Aucun chiffrement, aucun historique, aucune trace d’accès
  • Tableurs Excel — Circulent par email, finissent dans des dossiers publics
  • Messages Slack/Teams — Stockés en clair dans les logs, impossibles à révoquer
  • Variables d’environnement en dur — Finissent dans les commits Git, exposées dans les logs CI

Bitwarden résout ce problème avec deux approches complémentaires :

  1. Password Manager — Pour les humains. Vous stockez, partagez et gérez vos identifiants via une interface web, des extensions navigateur et des applications mobiles.

  2. Secrets Manager — Pour les machines. Vos applications et pipelines CI/CD récupèrent automatiquement les secrets dont ils ont besoin, sans intervention humaine.

C’est le cœur de Bitwarden. Il permet de :

  • Stocker des mots de passe, notes sécurisées, cartes bancaires, identités
  • Générer des mots de passe forts automatiquement
  • Partager des identifiants avec votre équipe via des organisations
  • Synchroniser sur tous vos appareils (web, desktop, mobile, navigateur)
  • Exporter/Importer depuis LastPass, 1Password, KeePass et autres

Le Password Manager utilise un chiffrement AES-256 avec PBKDF2-SHA256 (600 000 itérations par défaut). Vos données sont chiffrées avant d’être envoyées au serveur. Même Bitwarden ne peut pas les lire.

Lancé en 2023, le Secrets Manager est conçu pour les développeurs et les équipes DevOps. Il permet de :

  • Centraliser les secrets applicatifs (clés API, tokens, connexions DB)
  • Organiser les secrets par projets
  • Contrôler les accès via des comptes machines (machine accounts)
  • Injecter les secrets dans vos applications via la CLI bws
  • Auditer qui a accédé à quoi et quand (logs)

Bitwarden propose plusieurs plans, du gratuit à l’entreprise. Le choix dépend de vos besoins en fonctionnalités et du nombre d’utilisateurs.

PlanPrixFonctionnalités clés
FreeGratuitMots de passe illimités, 2 appareils, partage avec 1 personne
Premium10$/anTOTP intégré, 1 Go stockage fichiers, rapports de sécurité
Families40$/an6 utilisateurs, partage illimité, toutes les fonctionnalités Premium
PlanPrixFonctionnalités clés
Teams4$/user/moisPartage équipe, groupes, journaux d’audit, 2FA avancé
Enterprise6$/user/moisSSO (SAML/OIDC), SCIM, politiques personnalisées, Key Connector
PlanSecretsMachine accountsPrix
Teams6 00020 inclus6$/mois (pack de 500 secrets)
Enterprise12 00050 inclus12$/mois (pack de 500 secrets)

Docker Compose est la méthode la plus simple pour déployer Bitwarden en self-hosted.

  • Docker Engine 20.10+ avec Docker Compose
  • 4 Go de RAM minimum (8 Go recommandé)
  • Ports 80 et 443 disponibles
  • Un nom de domaine pointant vers votre serveur
  • Un serveur SMTP pour les notifications

Avant d’installer, vous devez obtenir un ID d’installation et une clé d’installation gratuits sur le site Bitwarden.

  1. Rendez-vous sur la page d’hébergement

    Ouvrez https://bitwarden.com/host dans votre navigateur.

  2. Remplissez le formulaire

    • Entrez votre adresse email
    • Sélectionnez votre région (Europe ou États-Unis)
    • Cochez la case d’acceptation des conditions
  3. Récupérez vos identifiants

    Vous recevrez par email :

    • Installation ID : un UUID (ex: a1b2c3d4-e5f6-7890-abcd-ef1234567890)
    • Installation Key : une clé secrète

    Conservez ces identifiants, vous en aurez besoin lors de l’installation.

  1. Créer un utilisateur dédié

    Pour des raisons de sécurité, créez un utilisateur système dédié à Bitwarden :

    Fenêtre de terminal
    sudo adduser bitwarden
    sudo usermod -aG docker bitwarden
  2. Créer le répertoire d’installation

    Fenêtre de terminal
    sudo mkdir -p /opt/bitwarden
    sudo chown -R bitwarden:bitwarden /opt/bitwarden
    sudo chmod 700 /opt/bitwarden
  3. Télécharger le script d’installation

    Connectez-vous en tant que l’utilisateur bitwarden et téléchargez le script :

    Fenêtre de terminal
    su - bitwarden
    cd /opt/bitwarden
    curl -Lso bitwarden.sh "https://func.bitwarden.com/api/dl/?app=self-host&platform=linux"
    chmod +x bitwarden.sh
  4. Lancer l’installation

    Fenêtre de terminal
    ./bitwarden.sh install

    Le script vous demandera :

    • Votre nom de domaine (ex: bitwarden.example.com)
    • Votre Installation ID et Installation Key
    • Si vous souhaitez utiliser Let’s Encrypt pour le certificat SSL (recommandé)
    • Votre région (EU ou US)
  5. Configurer l’environnement

    Éditez le fichier de configuration pour ajuster les paramètres :

    Fenêtre de terminal
    nano ./bwdata/env/global.override.env

    Configurez au minimum le serveur SMTP pour les emails :

    Fenêtre de terminal
    globalSettings__mail__smtp__host=smtp.example.com
    globalSettings__mail__smtp__port=587
    globalSettings__mail__smtp__ssl=true
    globalSettings__mail__smtp__username=notifications@example.com
    globalSettings__mail__smtp__password=VotreMotDePasseSMTP
  6. Configurer les administrateurs

    Toujours dans global.override.env, ajoutez les emails des administrateurs :

    Fenêtre de terminal
    adminSettings__admins=admin@example.com,ops@example.com

    Ces utilisateurs auront accès au portail d’administration système.

  7. Démarrer Bitwarden

    Fenêtre de terminal
    ./bitwarden.sh start

    Le premier démarrage prend 2-3 minutes pour initialiser les conteneurs.

  8. Créer le premier compte

    • Ouvrez https://bitwarden.example.com dans votre navigateur
    • Cliquez sur Créer un compte
    • Entrez votre email et créez un mot de passe maître fort

Vérification :

Fenêtre de terminal
# Vérifier que tous les conteneurs sont en cours d'exécution
docker ps --filter "name=bitwarden"
# Vérifier les logs
./bitwarden.sh logs

Vous devriez voir une dizaine de conteneurs en cours d’exécution : bitwarden-nginx, bitwarden-api, bitwarden-web, etc.

L’interface web est pratique pour le quotidien, mais elle ne suffit pas pour l’automatisation. La CLI bw permet de gérer vos mots de passe en ligne de commande : création en lot, récupération dans des scripts, export automatisé.

Fenêtre de terminal
# Télécharger le binaire
curl -L "https://bitwarden.com/download/?app=cli&platform=linux" -o bw.zip
unzip bw.zip
chmod +x bw
sudo mv bw /usr/local/bin/
# Vérification
bw --version
# 2026.1.0

Par défaut, la CLI se connecte aux serveurs cloud de Bitwarden. Pour utiliser votre serveur self-hosted :

Fenêtre de terminal
# Configurer l'URL du serveur
bw config server https://bitwarden.example.com
# Vérifier la configuration
bw status --pretty
# {
# "serverUrl": "https://bitwarden.example.com",
# "lastSync": null,
# "status": "unauthenticated"
# }

La CLI utilise un système de sessions. Vous vous authentifiez une fois, puis utilisez un token de session pour les commandes suivantes.

  1. Se connecter

    Fenêtre de terminal
    bw login

    Entrez votre email, mot de passe maître et code 2FA si activé.

    Résultat :

    You are logged in!
    To unlock your vault, set your session key to the `BW_SESSION` environment variable. ex:
    $ export BW_SESSION="5PBYGU+5yt3RHcCjoeJKx/wByU34vokGRZjXpSH7Ylo8w=="
  2. Définir la variable de session

    Fenêtre de terminal
    export BW_SESSION="5PBYGU+5yt3RHcCjoeJKx/wByU34vokGRZjXpSH7Ylo8w=="

    Cette variable permet d’exécuter les commandes sans ressaisir le mot de passe maître.

  3. Synchroniser le coffre

    Fenêtre de terminal
    bw sync
    # Syncing complete.

La CLI suit une structure simple : bw <commande> <objet> [options]. Les commandes principales sont list, get, create, edit, delete. Les objets sont items, folders, collections, etc.

Fenêtre de terminal
# Lister tous les éléments du coffre
bw list items
# Filtrer par recherche
bw list items --search "github"
# Filtrer par dossier
bw list items --folderid 60556c31-e649-4b5d-8daf-fc1c391a1bf2
# Afficher en JSON formaté
bw list items --pretty
Fenêtre de terminal
# Récupérer par nom (recherche)
bw get password github.com
# Récupérer par ID exact
bw get item 99ee88d2-6046-4ea7-92c2-acac464b1412
# Récupérer uniquement le mot de passe (pour scripts)
bw get password github.com
# G#kL9$mP2xNq!
# Récupérer le username
bw get username github.com
# johndoe

La création utilise un template JSON encodé en base64 :

Fenêtre de terminal
# Obtenir le template d'un élément
bw get template item
# Créer un élément en ligne de commande
bw get template item | \
jq '.name="Mon Service" | .login.username="admin" | .login.password="MonMotDePasse123"' | \
bw encode | bw create item
# Créer un dossier
echo '{"name":"Production"}' | bw encode | bw create folder
Fenêtre de terminal
# Mot de passe par défaut (14 caractères, majuscules, minuscules, chiffres)
bw generate
# DWCosTPW#hLWZ6
# Mot de passe complexe de 24 caractères avec caractères spéciaux
bw generate -ulns --length 24
# DWCosTPW#hLWZ6i%2D!OlA3z
# Passphrase de 5 mots
bw generate -p --words 5 --separator - -c
# Valiant-Rubble-Bonus-Enlarged-Implicit

Les options de génération :

  • -u, --uppercase : inclure majuscules
  • -l, --lowercase : inclure minuscules
  • -n, --number : inclure chiffres
  • -s, --special : inclure caractères spéciaux
  • -p, --passphrase : générer une passphrase
  • --words <n> : nombre de mots (passphrase)
  • --separator <char> : séparateur entre les mots

Send permet de partager des fichiers ou du texte de manière sécurisée avec expiration automatique :

Fenêtre de terminal
# Envoyer du texte (expire dans 7 jours par défaut)
bw send -n "API Key" "sk_live_xxxxxxxxxxxxx"
# Envoyer un fichier (expire dans 14 jours)
bw send -n "Certificat SSL" -f ./cert.pem -d 14
# Envoyer avec mot de passe
bw send -n "Credentials" --password "MotDePassePartage" "admin:secret123"
# Lister les envois
bw send list

Le destinataire reçoit un lien unique pour accéder au contenu, sans avoir besoin de compte Bitwarden.

Fenêtre de terminal
# Export CSV
bw export --format csv --output ./backup.csv
# Export JSON chiffré (recommandé pour les sauvegardes)
bw export --format encrypted_json --password "MotDePasseExport" --output ./backup.json

Le Password Manager est conçu pour les humains. Mais comment vos applications récupèrent-elles leurs secrets ? C’est le rôle du Secrets Manager et de sa CLI bws.

Le Secrets Manager utilise une architecture différente du Password Manager :

ConceptDescription
SecretUne paire clé-valeur sensible (ex: DATABASE_URL=postgres://...)
ProjectUn groupe logique de secrets (ex: “Production”, “Staging”)
Machine AccountUn compte non-humain qui accède aux secrets (ex: votre pipeline CI)
Access TokenLa clé d’authentification d’un machine account

Le flux est le suivant :

  1. Vous créez des projets et y ajoutez des secrets via l’interface web
  2. Vous créez un machine account avec accès à certains projets
  3. Vous générez un access token pour ce machine account
  4. Votre application utilise ce token pour récupérer les secrets via la CLI bws
Fenêtre de terminal
# Télécharger la dernière version
VERSION="2.0.0"
curl -LO "https://github.com/bitwarden/sdk-sm/releases/download/bws-v${VERSION}/bws-x86_64-unknown-linux-gnu-${VERSION}.zip"
unzip bws-x86_64-unknown-linux-gnu-${VERSION}.zip
chmod +x bws
sudo mv bws /usr/local/bin/
# Vérification
bws --version
# bws 2.0.0
  1. Activer Secrets Manager

    Dans l’interface web Bitwarden, allez dans Admin Console → Billing → Subscription et activez Secrets Manager pour votre organisation.

  2. Créer un projet

    Dans le menu de gauche, cliquez sur Projects → New Project :

    • Nom : production
    • Description : Secrets de l’environnement de production
  3. Ajouter des secrets

    Dans le projet, cliquez sur Secrets → Create Secret :

    Key: DATABASE_URL
    Value: postgres://app:secret@db.internal:5432/myapp
    Note: Connexion base PostgreSQL production
  4. Créer un machine account

    Allez dans Machine Accounts → New Machine Account :

    • Nom : ci-production
    • Accès : projet production avec permission Can read
  5. Générer un access token

    Dans le machine account, onglet Access Tokens :

    • Cliquez sur Create Access Token
    • Nom : gitlab-runner-01
    • Expiration : selon vos besoins (ou “Never” pour les tests)

    Copiez le token immédiatement, il ne sera plus affiché.

Fenêtre de terminal
# Via variable d'environnement (recommandé)
export BWS_ACCESS_TOKEN="0.48c78342-1635-48a6-accd-afbe01336365.C0tMmQqHnAp..."
# Via option en ligne de commande
bws secret list --access-token "0.48c78342..."
Fenêtre de terminal
# Lister tous les secrets accessibles
bws secret list
# Lister les secrets d'un projet spécifique
bws secret list e325ea69-a3ab-4dff-836f-b02e013fe530
# Format de sortie
bws secret list --output table
bws secret list --output yaml
bws secret list --output env # Format KEY=VALUE
Fenêtre de terminal
# Récupérer un secret par son ID
bws secret get be8e0ad8-d545-4017-a55a-b02f014d4158
# Sortie JSON par défaut :
# {
# "id": "be8e0ad8-d545-4017-a55a-b02f014d4158",
# "key": "DATABASE_URL",
# "value": "postgres://app:secret@db.internal:5432/myapp",
# "note": "Connexion base PostgreSQL production",
# ...
# }
# Extraire uniquement la valeur (pour scripts)
bws secret get be8e0ad8-... --output tsv | cut -f4
Fenêtre de terminal
# Créer un nouveau secret
bws secret create API_KEY "sk_live_xxxxxxxxxxxxx" e325ea69-a3ab-4dff-836f-b02e013fe530 \
--note "Clé API Stripe production"
# Paramètres :
# - KEY : nom du secret
# - VALUE : valeur du secret
# - PROJECT_ID : UUID du projet

La commande bws run est la plus puissante. Elle récupère tous les secrets accessibles et les injecte comme variables d’environnement dans la commande spécifiée :

Fenêtre de terminal
# Exécuter une commande avec les secrets injectés
bws run -- 'npm run start'
# Les secrets deviennent des variables d'environnement :
# DATABASE_URL, API_KEY, etc. sont accessibles dans l'application
# Limiter aux secrets d'un projet
bws run --project-id e325ea69-a3ab-4dff-836f-b02e013fe530 -- 'python app.py'
# Utiliser un shell spécifique
bws run --shell bash -- '/path/to/script.sh'
.gitlab-ci.yml
variables:
BWS_ACCESS_TOKEN: $BWS_TOKEN # Défini dans les variables CI/CD GitLab
deploy:
image: bitwarden/bws:latest
script:
- bws run -- ./deploy.sh
.github/workflows/deploy.yml
name: Deploy
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install bws
run: |
curl -LO https://github.com/bitwarden/sdk-sm/releases/download/bws-v2.0.0/bws-x86_64-unknown-linux-gnu-2.0.0.zip
unzip bws-*.zip && chmod +x bws && sudo mv bws /usr/local/bin/
- name: Deploy with secrets
env:
BWS_ACCESS_TOKEN: ${{ secrets.BWS_ACCESS_TOKEN }}
run: bws run -- ./deploy.sh

CritèreBitwardenPassboltHashiCorp Vault
TypePassword Manager + Secrets ManagerPassword ManagerSecrets Management
ChiffrementAES-256GPG (bout en bout)AES-256-GCM
Open sourceOuiOuiOui (core)
CLI Passwordbwgo-passbolt-cli
CLI Secretsbwsvault
Interface webOui, complèteOui, complèteOui
Extensions navigateurOui, tousChrome, Firefox
MobileiOS, AndroidNon
Self-hostedDockerDockerDocker
SSOEnterpriseProOui
Prix entréeGratuitGratuitGratuit

Quand choisir Bitwarden :

  • Vous voulez un gestionnaire complet (passwords + secrets)
  • Vous avez besoin d’applications mobiles et extensions navigateur
  • Vous souhaitez un déploiement simple (Docker Compose tout-en-un)

Quand choisir Passbolt :

  • Vous privilégiez le chiffrement GPG (bout en bout sans clé côté serveur)
  • Vous n’avez pas besoin d’applications mobiles
  • Vous préférez une installation plus légère

Quand choisir Vault :

  • Vous avez besoin de secrets dynamiques (credentials éphémères)
  • Vous gérez de l’infrastructure as code complexe
  • Vous avez des besoins avancés (PKI, transit encryption)

SymptômeCause probableSolution
unauthenticated après loginSession expiréeRefaire bw unlock et exporter BW_SESSION
Error: self-signed certificateCertificat SSL self-signedConfigurer Let’s Encrypt ou NODE_EXTRA_CA_CERTS
SMTP errors au démarrageConfiguration SMTP manquanteVérifier global.override.env
Session key is invalidToken de session incorrectRefaire bw login puis bw unlock
bws: command not foundCLI pas dans le PATHsudo mv bws /usr/local/bin/
Access denied sur bwsToken expiré ou permissionsVérifier le machine account
Fenêtre de terminal
# Statut des conteneurs
cd /opt/bitwarden && ./bitwarden.sh status
# Logs récents
./bitwarden.sh logs
# Redémarrer
./bitwarden.sh restart
Fenêtre de terminal
# Statut de connexion
bw status --pretty
# Forcer la synchronisation
bw sync --force
# Reconfigurer le serveur
bw config server https://bitwarden.example.com

  1. Deux produits complémentaires — Password Manager pour les humains, Secrets Manager pour les machines
  2. Chiffrement AES-256 — Vos données sont chiffrées côté client avant l’envoi
  3. CLI Password Manager (bw) — Génération (generate), récupération (get), création (create), partage (send)
  4. CLI Secrets Manager (bws) — Injection de secrets (run), CRUD (secret list/get/create)
  5. Self-hosted possible — Docker Compose avec script d’installation officiel
  6. Open source — Code audité, communauté active, audits de sécurité réguliers (Cure53)
  7. Gratuit pour commencer — Plans gratuits suffisants pour les petites équipes

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.