====== Runbook: Zertifikat erneuern ======
**Dauer:** ~10 Minuten \\
**Rolle:** Security-Admin \\
**Häufigkeit:** Alle 90 Tage (Let's Encrypt) oder jährlich
Erneuerung des TLS-Zertifikats für das Data Gateway.
----
===== Workflow =====
flowchart TD
A[Ablauf-Warnung] --> B{Zertifikatstyp?}
B -->|Let's Encrypt| C[certbot renew]
B -->|Interne CA| D[Neues Zertifikat anfordern]
B -->|Kommerziell| E[Beim Anbieter erneuern]
C --> F[Zertifikat austauschen]
D --> F
E --> F
F --> G[Gateway neustarten]
G --> H[HTTPS testen]
H --> I{OK?}
I -->|Ja| J[Fertig]
I -->|Nein| K[Altes Zertifikat wiederherstellen]
style J fill:#e8f5e9
style K fill:#ffebee
----
===== 1. Ablauf prüfen =====
# Aktuelles Zertifikat prüfen
openssl s_client -connect gateway.example.com:443 -servername gateway.example.com 2>/dev/null | \
openssl x509 -noout -dates
# Tage bis Ablauf
echo | openssl s_client -connect gateway.example.com:443 2>/dev/null | \
openssl x509 -noout -enddate | \
cut -d= -f2 | \
xargs -I {} bash -c 'echo "Tage bis Ablauf: $(( ($(date -d "{}" +%s) - $(date +%s)) / 86400 ))"'
----
===== 2a. Let's Encrypt erneuern =====
# Automatisch (wenn certbot korrekt eingerichtet)
sudo certbot renew
# Mit Pre/Post-Hook für Gateway
sudo certbot renew \
--pre-hook "systemctl stop data-gateway" \
--post-hook "systemctl start data-gateway"
# Trockenlauf (ohne echte Erneuerung)
sudo certbot renew --dry-run
**Automatisierung via Cron:**
# /etc/cron.d/certbot-gateway
0 3 * * * root certbot renew --quiet --post-hook "systemctl reload data-gateway"
----
===== 2b. Interne CA erneuern =====
# CSR erstellen
openssl req -new -key gateway.key -out gateway.csr \
-subj "/CN=gateway.example.com/O=Example Corp"
# CSR an CA senden (z.B. via PQ Crypto)
# → Neues Zertifikat: gateway-new.crt
Siehe: [[de:int:pqcrypt:szenarien:operator:tagesgeschaeft:zertifikat-erneuern|PQ Crypto: Zertifikat erneuern]]
----
===== 2c. Kommerzielles Zertifikat =====
1. Beim Anbieter (DigiCert, GlobalSign, etc.) einloggen
2. Renewal anfordern
3. CSR hochladen oder neu generieren
4. Validierung durchführen
5. Neues Zertifikat herunterladen
----
===== 3. Backup des alten Zertifikats =====
# Backup erstellen
cp /opt/data-gateway/certs/gateway.pfx /opt/data-gateway/certs/gateway.pfx.bak.$(date +%Y%m%d)
# Oder für PEM
cp /opt/data-gateway/certs/cert.pem /opt/data-gateway/certs/cert.pem.bak.$(date +%Y%m%d)
----
===== 4. Neues Zertifikat installieren =====
# PEM-Format
sudo cp new-cert.pem /opt/data-gateway/certs/cert.pem
sudo cp new-key.pem /opt/data-gateway/certs/key.pem
sudo chmod 600 /opt/data-gateway/certs/*.pem
# PFX-Format
sudo cp new-gateway.pfx /opt/data-gateway/certs/gateway.pfx
sudo chmod 600 /opt/data-gateway/certs/gateway.pfx
----
===== 5. Gateway neustarten =====
# Linux
sudo systemctl restart data-gateway
# Windows
Restart-Service -Name "DataGateway"
# Docker
docker restart gateway
# Kubernetes (Rolling Update)
kubectl rollout restart deployment/data-gateway -n data-gateway
----
===== 6. Verifizieren =====
# Neues Zertifikat aktiv?
echo | openssl s_client -connect gateway.example.com:443 2>/dev/null | \
openssl x509 -noout -subject -dates
# Health Check
curl https://gateway.example.com/health
# Vollständiger SSL-Test
openssl s_client -connect gateway.example.com:443 -servername gateway.example.com
----
===== 7. Rollback (falls nötig) =====
# Backup wiederherstellen
sudo cp /opt/data-gateway/certs/gateway.pfx.bak.20241215 /opt/data-gateway/certs/gateway.pfx
# Gateway neustarten
sudo systemctl restart data-gateway
# Verifizieren
curl https://gateway.example.com/health
----
===== 8. Checkliste =====
| # | Prüfpunkt | ✓ |
|---|-----------|---|
| 1 | Altes Zertifikat gesichert | ☐ |
| 2 | Neues Zertifikat gültig | ☐ |
| 3 | Hostnamen stimmen überein | ☐ |
| 4 | Zertifikat installiert | ☐ |
| 5 | Gateway neugestartet | ☐ |
| 6 | HTTPS funktioniert | ☐ |
| 7 | Monitoring benachrichtigt | ☐ |
----
===== Troubleshooting =====
| Problem | Ursache | Lösung |
|---------|---------|--------|
| ''Certificate mismatch'' | Key passt nicht | Key neu generieren |
| ''Chain incomplete'' | Intermediate fehlt | Chain-Datei hinzufügen |
| ''Permission denied'' | Falsche Rechte | chmod 600 |
| Gateway startet nicht | Falsches Passwort | appsettings.json prüfen |
----
===== Automatische Überwachung =====
Prometheus Alert für Zertifikatsablauf:
- alert: GatewayCertExpiringSoon
expr: |
(probe_ssl_earliest_cert_expiry{job="gateway-tls"} - time()) / 86400 < 14
for: 1h
labels:
severity: warning
annotations:
summary: "Gateway-Zertifikat läuft bald ab"
description: "Zertifikat läuft in {{ $value | humanize }} Tagen ab."
----
===== Verwandte Runbooks =====
* [[.:tls-einrichten|TLS einrichten]] – Erstmalige Konfiguration
* [[..:monitoring:alerting|Alerting]] – Ablauf-Überwachung
* [[de:int:pqcrypt:szenarien:operator:tagesgeschaeft:zertifikat-erneuern|PQ Crypto: Zertifikat erneuern]]
----
<< [[.:tls-einrichten|← TLS einrichten]] | [[.:firewall-regeln|→ Firewall-Regeln]] >>
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Data Gateway Professional//
{{tag>operator runbook zertifikat renewal tls}}