Runbook: Revoca certificato

Durata: ~5 minuti
Ruolo: Operatore PKI / Security
Priorità: ALTA in caso di compromissione


Workflow

flowchart TD A[Richiesta revoca] --> B{Motivo?} B -->|Compromissione| C[Bloccare SUBITO] B -->|Sostituzione| D[Blocco pianificato] B -->|Errore| E[Verificare + bloccare] C --> F[Aggiornare CRL] D --> F E --> F F --> G[Distribuire CRL] G --> H[Aggiornare OCSP] H --> I[Notifica] I --> J[Documentazione] style C fill:#ffebee style F fill:#fff3e0 style G fill:#e3f2fd


Motivi di revoca (RFC 5280)

Codice Motivo Quando usare
————-—————-
0 unspecified Standard (non consigliato)
1 keyCompromise Chiave privata compromessa
2 cACompromise CA compromessa
3 affiliationChanged Cambio organizzazione
4 superseded Sostituito da nuovo certificato
5 cessationOfOperation Servizio dismesso
9 privilegeWithdrawn Autorizzazione revocata

Passo 1: Identificare il certificato

# Cercare per numero di serie
openssl x509 -in certificate.pem -serial -subject -noout
 
# Cercare nel database CA
grep -r "CN=server.example.com" /etc/pki/CA/index.txt
# PowerShell: Trovare certificato
Get-ChildItem Cert:\LocalMachine\My | Where-Object {
    $_.Subject -like "*server.example.com*"
} | Select-Object SerialNumber, Subject, Thumbprint

Passo 2: Eseguire la revoca

OpenSSL (CLI)

# Revocare certificato
openssl ca -config openssl.cnf \
    -revoke /path/to/certificate.pem \
    -crl_reason keyCompromise
 
# Alternativa: Per numero di serie
openssl ca -config openssl.cnf \
    -revoke_by_serial 01234567890ABCDEF \
    -crl_reason keyCompromise

C# (WvdS.System.Security.Cryptography)

// Revocare certificato e creare CRL
var crlBuilder = new CertificateRevocationListBuilder();
 
// Aggiungere revoca
crlBuilder.AddEntry(
    revokedCert.SerialNumber,
    DateTimeOffset.UtcNow,
    X509RevocationReason.KeyCompromise);
 
// Firmare CRL (modalità ibrida)
using var issuerCert = new X509Certificate2("ca.pfx", "password");
var crlNumber = BigInteger.Parse("42");
var nextUpdate = DateTimeOffset.UtcNow.AddDays(7);
 
byte[] crl = crlBuilder.Build(
    issuerCert,
    crlNumber,
    nextUpdate,
    HashAlgorithmName.SHA384,
    CryptoMode.Hybrid);
 
File.WriteAllBytes("crl.der", crl);

Passo 3: Generare e distribuire CRL

# Generare nuova CRL
openssl ca -config openssl.cnf -gencrl -out crl.pem
 
# Convertire CRL in formato DER (per distribuzione)
openssl crl -in crl.pem -outform DER -out crl.der
 
# Verificare CRL
openssl crl -in crl.pem -text -noout

Distribution Points:

Metodo Destinazione Comando
———————–
HTTP Web-Server cp crl.der /var/www/pki/crl.der
LDAP Active Directory ldapmodify -f update-crl.ldif
CDP Nel certificato Automatico via URL
# Copiare CRL su Web-Server
scp crl.der webserver:/var/www/html/pki/crl.der
 
# Nginx/Apache Reload (se cache)
ssh webserver "systemctl reload nginx"

Passo 4: Aggiornare OCSP (se utilizzato)

# Aggiornare indice OCSP Responder (automatico con OpenSSL CA)
# Il responder legge /etc/pki/CA/index.txt
 
# Testare risposta OCSP
openssl ocsp \
    -issuer intermediate.pem \
    -cert certificate.pem \
    -url http://ocsp.example.com \
    -resp_text

Risposta attesa dopo la revoca:

Cert Status: revoked
Revocation Time: Dec 15 10:30:00 2024 GMT
Revocation Reason: keyCompromise

Passo 5: Notifica

Notifiche obbligatorie:

Destinatario Metodo Contenuto
———–—————–
Titolare certificato E-Mail Numero di serie, motivo, prossimi passi
Security Team Ticket Dettagli incidente
Sistemi interessati Alert Automatico via monitoring
# Inviare template e-mail
cat << 'EOF' | mail -s "Certificato revocato - Azione richiesta" admin@example.com
Il certificato è stato revocato:
 
Numero di serie: 01:23:45:67:89:AB:CD:EF
Subject: CN=server.example.com
Motivo: Key Compromise
Data: $(date -Iseconds)
 
Azione richiesta:
1. Configurare il servizio con nuovo certificato
2. Rimuovere il vecchio certificato da tutti i sistemi
 
Per domande: pki-team@example.com
EOF

Passo 6: Documentazione

Campo Valore
————
Numero di serie 01:23:45:67:89:AB:CD:EF
Subject CN=server.example.com
Motivo revoca keyCompromise
Data revoca 2024-12-15 10:30:00 UTC
Numero CRL 42
Operatore Nome-Operatore
Ticket SEC-2024-0815

Emergenza: Revoca di massa

In caso di compromissione CA:Runbook Revoca d'emergenza

# Revocare tutti i certificati di una CA
for cert in /etc/pki/CA/newcerts/*.pem; do
    openssl ca -config openssl.cnf -revoke "$cert" -crl_reason cACompromise
done
 
# Nuova CRL con validità breve
openssl ca -config openssl.cnf -gencrl -crldays 1 -out emergency-crl.pem

Checklist

# Punto di verifica
———–
1 Certificato inserito nella CRL
2 CRL firmata e valida
3 CRL disponibile su tutti i CDP
4 OCSP risponde revoked
5 Titolare certificato notificato
6 Ticket security documentato

Risoluzione problemi

Problema Causa Soluzione
————————–
already revoked Doppia revoca Ignorare
unknown serial Non da questa CA Verificare CA
CRL non valida Errore firma Verificare chiave CA
OCSP risponde good Cache/Sync Riavviare OCSP Responder

Runbook correlati


« Rinnovo certificato | Health Check »


Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional

Zuletzt geändert: il 30/01/2026 alle 06:32