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 – Neue Zertifikate
- Zertifikat widerrufen – Bei Kompromittierung
- Automatische Erneuerung – Automation
« ← Zertifikat ausstellen | → Zertifikat widerrufen »
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional
Zuletzt geändert: den 29.01.2026 um 15:13