Aller au contenu

Rotation des secrets

Procédures de rotation pour chacun des secrets de MesMy. À planifier périodiquement et en cas de suspicion de compromission.

Secrets clients OIDC

Le plus courant, réalisable sans interruption depuis le back-office.

  1. Back-office → Applications (OIDC) → application concernée → Régénérer le secret.
  2. Le nouveau secret s'affiche une seule fois : copiez-le immédiatement.
  3. Reportez-le dans la configuration de l'application cliente (CLIENT_SECRET / OIDC_CLIENT_SECRET) et redéployez-la.

L'action est tracée dans le journal d'audit (client.secret_rotated). L'ancien secret cesse immédiatement d'être valide.

Clés de signature des tokens (JWKS, RS256)

Les clients vérifient les tokens via l'endpoint /jwks. Pour une rotation propre :

  1. Générez un nouveau jeu de clés :
    pnpm --filter @mesmy/backend jwks:generate ./oidc-jwks-new.json
    
  2. Fusionnez l'ancienne et la nouvelle clé dans le fichier JWKS (tableau keys) : le provider signe avec la première et publie les deux, laissant les tokens en cours valides le temps de leur expiration.
  3. Montez le fichier mis à jour (OIDC_JWKS_PATH) et redémarrez le backend.
  4. Après expiration des anciens tokens (durée de vie du refresh token), retirez l'ancienne clé et redémarrez.

Clé de chiffrement applicative (APP_ENCRYPTION_KEY)

Chiffre les secrets clients et les secrets TOTP. Sa rotation impose de re-chiffrer les données existantes :

  1. Conservez l'ancienne clé, générez la nouvelle (openssl rand -base64 32).
  2. Exécutez un script de migration qui, pour chaque OidcClient.clientSecretEnc et chaque User.mfaSecretEnc, déchiffre avec l'ancienne clé et re-chiffre avec la nouvelle.
  3. Basculez APP_ENCRYPTION_KEY sur la nouvelle valeur et redémarrez.

Danger

Ne changez jamais APP_ENCRYPTION_KEY sans re-chiffrer au préalable : les secrets deviendraient illisibles (clients OIDC cassés, MFA inutilisable).

Liste de clés séparées par des virgules. La première signe, les suivantes vérifient (permet une rotation sans invalider les sessions en cours).

  1. Ajoutez la nouvelle clé en tête : nouvelle,ancienne.
  2. Redémarrez le backend.
  3. Après la durée de vie des sessions, retirez l'ancienne clé.

Clés API Mailjet

En cas de compromission, régénérez la paire dans le tableau de bord Mailjet, mettez à jour MAILJET_API_KEY / MAILJET_API_SECRET, puis redémarrez le backend.

Mots de passe utilisateurs

Un administrateur peut forcer une réinitialisation depuis le back-office (Utilisateurs → Reset mot de passe) : un lien à usage unique est envoyé et les sessions portail existantes de l'utilisateur sont révoquées.