Inhaltsverzeichnis

Runbook: Zertifikat erneuern

Dauer: ~15 Minuten
Rolle: PKI-Operator
Trigger: Ablauf-Warnung (30/14/7 Tage)


Workflow

flowchart TD A[Ablauf-Warnung] --> B{Schlüssel kompromittiert?} B -->|Ja| C[→ Widerrufs-Runbook] B -->|Nein| D{Gleiches Schlüsselpaar?} D -->|Ja| E[Re-Certification] D -->|Nein| F[Re-Key] E --> G[Neues Zertifikat] F --> H[Neuer CSR] H --> G G --> I[Altes Zertifikat archivieren] I --> J[Neues Zertifikat deployen] J --> K[Monitoring aktualisieren] style B fill:#ffebee style G fill:#e8f5e9 style J fill:#e3f2fd


Schritt 1: Ablaufende Zertifikate identifizieren

# Alle Zertifikate mit Ablauf < 30 Tage
find /etc/ssl/certs -name "*.pem" -exec sh -c '
    enddate=$(openssl x509 -enddate -noout -in "$1" 2>/dev/null | cut -d= -f2)
    if [ -n "$enddate" ]; then
        expiry=$(date -d "$enddate" +%s 2>/dev/null)
        now=$(date +%s)
        days=$(( (expiry - now) / 86400 ))
        if [ "$days" -lt 30 ]; then
            echo "$1: $days Tage"
        fi
    fi
' _ {} \;
# PowerShell: Ablaufende Zertifikate finden
Get-ChildItem Cert:\LocalMachine\My | Where-Object {
    $_.NotAfter -lt (Get-Date).AddDays(30)
} | Select-Object Subject, NotAfter, Thumbprint

Schritt 2: Erneuerungsmethode wählen

Methode Wann verwenden Vorteil
————————-———
Re-Certification Schlüssel sicher, keine Änderungen Schnell, kein Re-Deploy
Re-Key Neue Schlüssellänge, Policy-Änderung Sicherheit erhöht
Replace Neuer Algorithmus (→ PQ) Zukunftssicher

Schritt 3a: Re-Certification (gleiches Schlüsselpaar)

# CSR aus bestehendem Zertifikat + Key generieren
openssl x509 -x509toreq -in old_cert.pem -signkey private.key -out renew.csr
 
# Neues Zertifikat ausstellen
openssl ca -config openssl.cnf \
    -extensions server_cert \
    -in renew.csr \
    -out renewed_cert.pem \
    -days 365 \
    -notext

Schritt 3b: Re-Key (neues Schlüsselpaar)

# Neuen Schlüssel generieren (EC P-384)
openssl ecparam -genkey -name secp384r1 -out new_private.key
 
# Neuen CSR mit gleichem Subject
openssl req -new -key new_private.key -out rekey.csr \
    -subj "$(openssl x509 -in old_cert.pem -subject -noout | sed 's/subject=//')"
 
# Zertifikat ausstellen
openssl ca -config openssl.cnf \
    -extensions server_cert \
    -in rekey.csr \
    -out rekeyed_cert.pem \
    -days 365

Schritt 3c: Replace (Upgrade zu Hybrid/PQ)

// Migration zu Hybrid-Modus
using var oldCert = new X509Certificate2("old_cert.pfx", "password");
 
// Neues Schlüsselpaar (ML-DSA-65 für Hybrid)
using var mlDsa = MlDsaSigner.Create(MlDsaParameterSet.MlDsa65);
using var ecdsa = ECDsa.Create(ECCurve.NamedCurves.nistP384);
 
var request = new CertificateRequest(
    oldCert.SubjectName,
    ecdsa,
    HashAlgorithmName.SHA384);
 
// Extensions übernehmen
foreach (var ext in oldCert.Extensions)
    request.CertificateExtensions.Add(ext);
 
// Hybrid-Zertifikat erstellen
var newCert = request.CreateSelfSigned(
    DateTimeOffset.UtcNow,
    DateTimeOffset.UtcNow.AddDays(365),
    CryptoMode.Hybrid);

Schritt 4: Altes Zertifikat archivieren

# Archivieren mit Metadaten
ARCHIVE_DIR="/var/archive/certs/$(date +%Y)"
mkdir -p "$ARCHIVE_DIR"
 
# Zertifikat + Metadaten
cp old_cert.pem "$ARCHIVE_DIR/$(openssl x509 -serial -noout -in old_cert.pem | cut -d= -f2).pem"
 
# Archiv-Log
echo "$(date -Iseconds) RENEWED $(openssl x509 -serial -noout -in old_cert.pem)" >> /var/log/cert-archive.log

Schritt 5: Deployment

System Deployment-Methode Neustart erforderlich
——–——————-———————-
Apache cp cert.pem /etc/ssl/; systemctl reload apache2 Nein
Nginx cp cert.pem /etc/nginx/ssl/; nginx -s reload Nein
IIS Import-PfxCertificate; netsh http update Nein
Kubernetes kubectl create secret tls Pod Restart
# Apache/Nginx Reload
systemctl reload apache2
# oder
nginx -s reload
 
# Verbindung testen
openssl s_client -connect server.example.com:443 -brief

Schritt 6: Monitoring aktualisieren

# Neuen Fingerprint in Monitoring eintragen
NEW_FP=$(openssl x509 -fingerprint -sha256 -noout -in renewed_cert.pem | cut -d= -f2)
echo "Neuer Fingerprint: $NEW_FP"
 
# Prometheus-Alert aktualisieren (falls fingerprint-basiert)
# Ablaufdatum im Monitoring sollte automatisch aktualisiert werden

Checkliste nach Erneuerung

# Prüfpunkt Befehl
———–——–
1 Neues Zertifikat aktiv openssl s_client -connect host:443
2 Kette vollständig openssl verify -CAfile chain.pem cert.pem
3 Altes Zertifikat archiviert ls /var/archive/certs/
4 Ticket geschlossen Ticket-System
5 Monitoring aktualisiert Dashboard prüfen

Fehlerbehebung

Problem Ursache Lösung
————————–
certificate has expired Reload vergessen Service neustarten
certificate chain incomplete Intermediate fehlt cat cert.pem intermediate.pem > fullchain.pem
hostname mismatch SAN nicht aktualisiert CSR mit korrekten SANs
Client vertraut nicht CA nicht im Store CA-Zertifikat verteilen

Verwandte Runbooks


« ← Zertifikat ausstellen | → Zertifikat widerrufen »


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