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é¶
- Paramètres → GPG → Générer une nouvelle clé
- Renseigner le nom et l'email
- 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