[
  {
    "giorno": "G-7",
    "azione": "Generare la coppia e pubblicare il selettore inattivo nel DNS",
    "comando": "openssl genrsa -out dkim_private.pem 2048",
    "verifica": "dig +short TXT s2026-q1._domainkey.captaindns.com"
  },
  {
    "giorno": "G-7",
    "azione": "Archiviare la chiave privata in KMS o Vault",
    "comando": "vault kv put secret/dkim/captaindns/s2026-q1 private_key=@dkim_private.pem",
    "verifica": "vault kv get secret/dkim/captaindns/s2026-q1"
  },
  {
    "giorno": "G+0",
    "azione": "Commutare la firma MTA sul nuovo selettore",
    "comando": "aws sesv2 put-email-identity-dkim-signing-attributes --email-identity captaindns.com",
    "verifica": "Verificare l'header DKIM-Signature dei messaggi inviati"
  },
  {
    "giorno": "G+1",
    "azione": "Monitorare i report DMARC aggregate (rua) per 24h",
    "comando": "N/A (parsing rua)",
    "verifica": "auth_results/dkim/selector = s2026-q1 per il 100% del traffico"
  },
  {
    "giorno": "G+7",
    "azione": "Confermare il 100% del traffico firmato dal nuovo selettore",
    "comando": "N/A (aggregazione rua 7 giorni)",
    "verifica": "Soglia obiettivo: meno dell'1% sul selettore precedente"
  },
  {
    "giorno": "G+8",
    "azione": "Rimuovere la firma MTA sul selettore precedente (il TXT resta pubblicato)",
    "comando": "Modificare KeyTable e SigningTable di OpenDKIM poi reload",
    "verifica": "Nessun messaggio in uscita firmato con il selettore precedente"
  },
  {
    "giorno": "G+30",
    "azione": "Eliminare il TXT del selettore precedente e distruggere la chiave privata in KMS",
    "comando": "curl -X DELETE Cloudflare API dns_records poi vault kv destroy",
    "verifica": "dig +short TXT s2025-q4._domainkey.captaindns.com restituisce vuoto"
  }
]
