[
  {
    "jour": "J-7",
    "action": "Générer la paire et publier le sélecteur inactif dans le DNS",
    "commande": "openssl genrsa -out dkim_private.pem 2048",
    "verification": "dig +short TXT s2026-q1._domainkey.captaindns.com"
  },
  {
    "jour": "J-7",
    "action": "Stocker la clé privée en KMS ou Vault",
    "commande": "vault kv put secret/dkim/captaindns/s2026-q1 private_key=@dkim_private.pem",
    "verification": "vault kv get secret/dkim/captaindns/s2026-q1"
  },
  {
    "jour": "J+0",
    "action": "Basculer la signature MTA vers le nouveau sélecteur",
    "commande": "aws sesv2 put-email-identity-dkim-signing-attributes --email-identity captaindns.com",
    "verification": "Vérifier l'en-tête DKIM-Signature des messages envoyés"
  },
  {
    "jour": "J+1",
    "action": "Surveiller les rapports DMARC aggregate (rua) pendant 24h",
    "commande": "N/A (parsing rua)",
    "verification": "auth_results/dkim/selector = s2026-q1 pour 100% du trafic"
  },
  {
    "jour": "J+7",
    "action": "Confirmer 100% du trafic signé par le nouveau sélecteur",
    "commande": "N/A (agrégation rua 7 jours)",
    "verification": "Seuil cible : moins de 1% sur l'ancien sélecteur"
  },
  {
    "jour": "J+8",
    "action": "Retirer la signature MTA sur l'ancien sélecteur (TXT reste publié)",
    "commande": "Éditer KeyTable et SigningTable OpenDKIM puis reload",
    "verification": "Aucun message sortant signé avec l'ancien sélecteur"
  },
  {
    "jour": "J+30",
    "action": "Supprimer le TXT de l'ancien sélecteur et détruire la clé privée en KMS",
    "commande": "curl -X DELETE Cloudflare API dns_records puis vault kv destroy",
    "verification": "dig +short TXT s2025-q4._domainkey.captaindns.com retourne vide"
  }
]
