Skip to content

Rotation des clés GPG

Renouveler la clé GPG de signature du dépôt avant expiration ou en cas de compromission.

Version complète en anglais

Consultez le guide complet →


Quand effectuer une rotation ?

  • La clé expire dans moins de 30 jours
  • La clé privée est potentiellement compromise
  • Changement d'organisation ou de responsable du dépôt
  • Politique de sécurité exigeant une rotation périodique

Procédure

Étape 1 — Générer une nouvelle clé

  1. Paramètres → GPG → Générer une nouvelle clé
  2. Renseigner le nom et l'email
  3. Cliquer Générer
docker exec backend-api gpg --homedir /repos/gnupg \
  --batch --gen-key <<EOF
%no-protection
Key-Type: RSA
Key-Length: 4096
Name-Real: Repod Repository
Name-Email: [email protected]
Expire-Date: 2y
%commit
EOF

Étape 2 — Réinitialiser les distributions

La nouvelle clé doit signer les fichiers InRelease / repomd.xml :

TOKEN=$(curl -s -X POST http://localhost:8000/auth/token \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"VotreMotDePasse!"}' | jq -r .access_token)

curl -X POST -H "Authorization: Bearer $TOKEN" \
  http://localhost:8000/api/v1/distributions/init

Étape 3 — Distribuer la nouvelle clé publique

Clients APT

# Sur chaque machine cliente
curl -fsSL http://VOTRE_HOTE:80/repos/dists/jammy/InRelease \
  | gpg --dearmor \
  | sudo tee /etc/apt/trusted.gpg.d/repod.gpg > /dev/null

sudo apt update

Clients RPM (DNF)

# Supprimer l'ancienne clé
sudo rpm -e gpg-pubkey-$(rpm -q gpg-pubkey --qf '%{version}\n' | head -1)

# Importer la nouvelle clé
sudo rpm --import http://VOTRE_HOTE:80/repos/gpg.key
sudo dnf clean all
sudo dnf makecache

Étape 4 — Sauvegarder la nouvelle clé

# Exporter et sauvegarder hors-ligne
docker exec backend-api gpg --homedir /repos/gnupg \
  --armor --export [email protected] > repod-new-key-$(date +%Y%m%d).asc

Suppression de l'ancienne clé

Une fois que tous les clients ont importé la nouvelle clé (attendre au moins 72h pour couvrir les caches de métadonnées) :

# Lister les clés
docker exec backend-api gpg --homedir /repos/gnupg --list-keys

# Supprimer l'ancienne (remplacer FINGERPRINT par l'empreinte réelle)
docker exec backend-api gpg --homedir /repos/gnupg \
  --delete-secret-and-public-key FINGERPRINT

Checklist de rotation

  • Nouvelle clé GPG générée
  • Distributions ré-initialisées (signatures régénérées)
  • Cliente APT mis à jour (nouvelle clé importée)
  • Clients RPM mis à jour (ancienne clé supprimée, nouvelle importée)
  • Nouvelle clé sauvegardée hors-ligne
  • Ancienne clé supprimée du keyring (après délai de grâce)
  • Rotation documentée dans le registre des changements