Inhaltsverzeichnis

Runbook: Zertifikat widerrufen

Dauer: ~5 Minuten
Rolle: PKI-Operator / Security
Priorität: HOCH bei Kompromittierung


Workflow

flowchart TD A[Widerrufsanfrage] --> B{Grund?} B -->|Kompromittierung| C[SOFORT sperren] B -->|Ablösung| D[Geplant sperren] B -->|Fehler| E[Prüfen + sperren] C --> F[CRL aktualisieren] D --> F E --> F F --> G[CRL verteilen] G --> H[OCSP aktualisieren] H --> I[Benachrichtigung] I --> J[Dokumentation] style C fill:#ffebee style F fill:#fff3e0 style G fill:#e3f2fd


Widerrufsgründe (RFC 5280)

Code Grund Wann verwenden
————-—————-
0 unspecified Standard (nicht empfohlen)
1 keyCompromise Privater Schlüssel kompromittiert
2 cACompromise CA kompromittiert
3 affiliationChanged Organisation gewechselt
4 superseded Durch neues Zertifikat ersetzt
5 cessationOfOperation Dienst eingestellt
9 privilegeWithdrawn Berechtigung entzogen

Schritt 1: Zertifikat identifizieren

# Nach Seriennummer suchen
openssl x509 -in certificate.pem -serial -subject -noout
 
# In CA-Datenbank suchen
grep -r "CN=server.example.com" /etc/pki/CA/index.txt
# PowerShell: Zertifikat finden
Get-ChildItem Cert:\LocalMachine\My | Where-Object {
    $_.Subject -like "*server.example.com*"
} | Select-Object SerialNumber, Subject, Thumbprint

Schritt 2: Widerruf durchführen

OpenSSL (CLI)

# Zertifikat widerrufen
openssl ca -config openssl.cnf \
    -revoke /path/to/certificate.pem \
    -crl_reason keyCompromise
 
# Alternative: Nach Seriennummer
openssl ca -config openssl.cnf \
    -revoke_by_serial 01234567890ABCDEF \
    -crl_reason keyCompromise

C# (WvdS.System.Security.Cryptography)

// Zertifikat widerrufen und CRL erstellen
var crlBuilder = new CertificateRevocationListBuilder();
 
// Widerruf hinzufügen
crlBuilder.AddEntry(
    revokedCert.SerialNumber,
    DateTimeOffset.UtcNow,
    X509RevocationReason.KeyCompromise);
 
// CRL signieren (Hybrid-Modus)
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);

Schritt 3: CRL generieren und verteilen

# Neue CRL generieren
openssl ca -config openssl.cnf -gencrl -out crl.pem
 
# CRL in DER-Format konvertieren (für Distribution)
openssl crl -in crl.pem -outform DER -out crl.der
 
# CRL prüfen
openssl crl -in crl.pem -text -noout

Distribution Points:

Methode Ziel Befehl
———————–
HTTP Web-Server cp crl.der /var/www/pki/crl.der
LDAP Active Directory ldapmodify -f update-crl.ldif
CDP In Zertifikat Automatisch via URL
# CRL auf Web-Server kopieren
scp crl.der webserver:/var/www/html/pki/crl.der
 
# Nginx/Apache Reload (falls Cache)
ssh webserver "systemctl reload nginx"

Schritt 4: OCSP aktualisieren (falls verwendet)

# OCSP-Responder Index aktualisieren (automatisch bei OpenSSL CA)
# Der Responder liest /etc/pki/CA/index.txt
 
# OCSP-Response testen
openssl ocsp \
    -issuer intermediate.pem \
    -cert certificate.pem \
    -url http://ocsp.example.com \
    -resp_text

Erwartete Antwort nach Widerruf:

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

Schritt 5: Benachrichtigung

Pflicht-Benachrichtigungen:

Empfänger Methode Inhalt
———–—————–
Zertifikatsinhaber E-Mail Seriennummer, Grund, nächste Schritte
Security Team Ticket Incident-Details
Betroffene Systeme Alert Automatisch via Monitoring
# E-Mail-Template senden
cat << 'EOF' | mail -s "Zertifikat widerrufen - Aktion erforderlich" admin@example.com
Zertifikat wurde widerrufen:
 
Seriennummer: 01:23:45:67:89:AB:CD:EF
Subject: CN=server.example.com
Grund: Key Compromise
Datum: $(date -Iseconds)
 
Aktion erforderlich:
1. Dienst mit neuem Zertifikat konfigurieren
2. Altes Zertifikat aus allen Systemen entfernen
 
Bei Fragen: pki-team@example.com
EOF

Schritt 6: Dokumentation

Feld Wert
————
Seriennummer 01:23:45:67:89:AB:CD:EF
Subject CN=server.example.com
Widerrufsgrund keyCompromise
Widerrufsdatum 2024-12-15 10:30:00 UTC
CRL-Nummer 42
Operator Operator-Name
Ticket SEC-2024-0815

Notfall: Massen-Widerruf

Bei CA-Kompromittierung:Notfall-Revocation Runbook

# Alle Zertifikate einer CA widerrufen
for cert in /etc/pki/CA/newcerts/*.pem; do
    openssl ca -config openssl.cnf -revoke "$cert" -crl_reason cACompromise
done
 
# Neue CRL mit kurzer Gültigkeit
openssl ca -config openssl.cnf -gencrl -crldays 1 -out emergency-crl.pem

Checkliste

# Prüfpunkt
———–
1 Zertifikat in CRL eingetragen
2 CRL signiert und gültig
3 CRL auf allen CDPs verfügbar
4 OCSP antwortet revoked
5 Zertifikatsinhaber benachrichtigt
6 Security-Ticket dokumentiert

Fehlerbehebung

Problem Ursache Lösung
————————–
already revoked Doppelter Widerruf Ignorieren
unknown serial Nicht von dieser CA CA prüfen
CRL ungültig Signatur-Fehler CA-Key prüfen
OCSP antwortet good Cache/Sync OCSP-Responder neustarten

Verwandte Runbooks


« ← Zertifikat erneuern | → Health Check »


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