Inhaltsverzeichnis
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 | 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
- Emissione certificato - Certificato sostitutivo
- Revoca d'emergenza - Revoca di massa
- Riferimento rapido validazione - Verifica CRL/OCSP
« 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