- Detaillierter Plan zur Migration von alter zu neuer Modulstruktur - Umfasst Überführung von shared-kernel zu core-Modulen - Definiert Migration von Fachdomänen zu bounded contexts: * master-data → masterdata-Module * member-management → members-Module * horse-registry → horses-Module * event-management → events-Module - Beschreibt Verlagerung von api-gateway zu infrastructure/gateway - Strukturiert nach Domain-driven Design Prinzipien - Berücksichtigt Clean Architecture Layering (domain, application, infrastructure, api)
7.6 KiB
SSL/TLS Zertifikat-Setup für die Produktionsumgebung
Dieses Verzeichnis enthält SSL/TLS-Zertifikate und Schlüssel zur Absicherung der Meldestelle-Anwendung in der Produktionsumgebung.
Verzeichnisstruktur
config/ssl/
├── postgres/ # PostgreSQL SSL-Zertifikate
├── redis/ # Redis TLS-Zertifikate
├── keycloak/ # Keycloak HTTPS-Zertifikate
├── prometheus/ # Prometheus HTTPS-Zertifikate
├── grafana/ # Grafana HTTPS-Zertifikate
├── nginx/ # Nginx SSL-Zertifikate
└── README.md # Diese Datei
Zertifikat-Anforderungen
1. PostgreSQL SSL-Zertifikate
Platzieren Sie die folgenden Dateien in config/ssl/postgres/:
server.crt- Server-Zertifikatserver.key- Privater Server-Schlüsselca.crt- Certificate Authority-Zertifikat
2. Redis TLS-Zertifikate
Platzieren Sie die folgenden Dateien in config/ssl/redis/:
redis.crt- Redis Server-Zertifikatredis.key- Privater Redis Server-Schlüsselca.crt- Certificate Authority-Zertifikatredis.dh- Diffie-Hellman Parameter
3. Keycloak HTTPS-Zertifikate
Platzieren Sie die folgenden Dateien in config/ssl/keycloak/:
server.crt.pem- Server-Zertifikat im PEM-Formatserver.key.pem- Privater Server-Schlüssel im PEM-Format
4. Prometheus HTTPS-Zertifikate
Platzieren Sie die folgenden Dateien in config/ssl/prometheus/:
prometheus.crt- Prometheus Server-Zertifikatprometheus.key- Privater Prometheus Server-Schlüsselweb.yml- Prometheus Web-Konfigurationsdatei
5. Grafana HTTPS-Zertifikate
Platzieren Sie die folgenden Dateien in config/ssl/grafana/:
server.crt- Grafana Server-Zertifikatserver.key- Privater Grafana Server-Schlüssel
6. Nginx SSL-Zertifikate
Platzieren Sie die folgenden Dateien in config/ssl/nginx/:
server.crt- Haupt-SSL-Zertifikatserver.key- Privater Haupt-SSL-Schlüsseldhparam.pem- Diffie-Hellman Parameter
Generierung selbstsignierter Zertifikate (Entwicklung/Test)
⚠️ Warnung: Verwenden Sie selbstsignierte Zertifikate nur für Entwicklung und Tests. Nutzen Sie ordnungsgemäß von einer CA signierte Zertifikate in der Produktion.
CA-Zertifikat generieren
# CA privaten Schlüssel erstellen
openssl genrsa -out ca.key 4096
# CA-Zertifikat erstellen
openssl req -new -x509 -days 365 -key ca.key -out ca.crt \
-subj "/C=AT/ST=Vienna/L=Vienna/O=Meldestelle/OU=IT/CN=Meldestelle-CA"
Server-Zertifikate generieren
# Für jeden Service privaten Schlüssel und Certificate Signing Request generieren
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr \
-subj "/C=AT/ST=Vienna/L=Vienna/O=Meldestelle/OU=IT/CN=ihre-domain.com"
# Zertifikat mit CA signieren
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key \
-CAcreateserial -out server.crt
# Aufräumen
rm server.csr
Diffie-Hellman Parameter generieren
openssl dhparam -out dhparam.pem 2048
Produktions-Zertifikat Setup
Option 1: Let's Encrypt (Empfohlen)
Verwenden Sie Certbot, um kostenlose SSL-Zertifikate zu erhalten:
# Certbot installieren
sudo apt-get install certbot
# Zertifikate erhalten
sudo certbot certonly --standalone -d ihre-domain.com -d www.ihre-domain.com
# Zertifikate in entsprechende Verzeichnisse kopieren
sudo cp /etc/letsencrypt/live/ihre-domain.com/fullchain.pem config/ssl/nginx/server.crt
sudo cp /etc/letsencrypt/live/ihre-domain.com/privkey.pem config/ssl/nginx/server.key
Option 2: Kommerzielle CA
- Certificate Signing Requests (CSRs) generieren
- CSRs an Ihre Certificate Authority übermitteln
- Signierte Zertifikate herunterladen
- Zertifikate in entsprechende Verzeichnisse platzieren
Option 3: Interne CA
Bei Verwendung einer internen Certificate Authority:
- CSRs für jeden Service generieren
- Zertifikate mit Ihrer internen CA signieren
- CA-Zertifikat an alle Clients verteilen
Dateiberechtigungen
Stellen Sie ordnungsgemäße Dateiberechtigungen für die Sicherheit sicher:
# Restriktive Berechtigungen für private Schlüssel setzen
chmod 600 config/ssl/*/server.key
chmod 600 config/ssl/*/redis.key
chmod 600 config/ssl/*/prometheus.key
# Lesbare Berechtigungen für Zertifikate setzen
chmod 644 config/ssl/*/server.crt
chmod 644 config/ssl/*/ca.crt
# Verzeichnisberechtigungen setzen
chmod 755 config/ssl/*/
Docker Volume Mounts
Die Zertifikate werden als schreibgeschützte Volumes in die Docker-Container eingebunden:
volumes:
- ./config/ssl/nginx:/etc/ssl/nginx:ro
- ./config/ssl/keycloak:/opt/keycloak/conf:ro
# ... weitere Mounts
Zertifikat-Erneuerung
Automatisierte Erneuerung (Let's Encrypt)
Richten Sie einen Cron-Job für automatische Erneuerung ein:
# Zu Crontab hinzufügen
0 12 * * * /usr/bin/certbot renew --quiet --post-hook "docker-compose -f docker-compose.prod.yml restart nginx"
Manuelle Erneuerung
- Neue Zertifikate generieren
- Alte Zertifikate in SSL-Verzeichnissen ersetzen
- Betroffene Services neu starten:
docker-compose -f docker-compose.prod.yml restart nginx keycloak grafana prometheus
Sicherheits-Best-Practices
- Starke Verschlüsselung verwenden: Mindestens 2048-Bit RSA-Schlüssel oder 256-Bit ECDSA-Schlüssel verwenden
- Regelmäßige Rotation: Zertifikate regelmäßig rotieren (jährlich oder halbjährlich)
- Sichere Speicherung: Private Schlüssel sicher speichern und Zugriff beschränken
- Ablauf überwachen: Überwachung für Zertifikat-Ablauf einrichten
- HSTS verwenden: HTTP Strict Transport Security aktivieren
- Perfect Forward Secrecy: ECDHE-Cipher-Suites verwenden
- Certificate Transparency: CT-Logs auf unbefugte Zertifikate überwachen
Fehlerbehebung
Häufige Probleme
-
Berechtigung verweigert
# Dateiberechtigungen korrigieren sudo chown -R $USER:$USER config/ssl/ chmod -R 755 config/ssl/ chmod 600 config/ssl/*/server.key -
Zertifikat-Verifizierung fehlgeschlagen
# Zertifikat verifizieren openssl x509 -in config/ssl/nginx/server.crt -text -noout # Zertifikatskette prüfen openssl verify -CAfile config/ssl/nginx/ca.crt config/ssl/nginx/server.crt -
TLS-Handshake-Fehler
- Gültigkeitsdaten des Zertifikats prüfen
- Verifizieren, dass Zertifikat zum Hostnamen passt
- Ordnungsgemäße Cipher-Suite-Konfiguration sicherstellen
SSL-Konfiguration testen
# SSL-Zertifikat testen
openssl s_client -connect ihre-domain.com:443 -servername ihre-domain.com
# Mit spezifischem Protokoll testen
openssl s_client -connect ihre-domain.com:443 -tls1_2
# Zertifikat-Ablauf prüfen
openssl x509 -in config/ssl/nginx/server.crt -noout -dates
# Zertifikat-Details anzeigen
openssl x509 -in config/ssl/nginx/server.crt -text -noout
Monitoring und Wartung
Zertifikat-Überwachung
Implementieren Sie Überwachung für:
- Zertifikat-Ablaufdaten
- Zertifikat-Gültigkeit
- SSL/TLS-Handshake-Erfolg
- Cipher-Suite-Verwendung
Wartungsaufgaben
- Regelmäßige Überprüfung der Zertifikat-Gültigkeit
- Aktualisierung der Cipher-Suites
- Überwachung der Sicherheitsupdates
- Backup der Zertifikate und privaten Schlüssel
Weitere Ressourcen
- Mozilla SSL Configuration Generator
- SSL Labs Server Test
- Let's Encrypt Dokumentation
- OpenSSL Dokumentation
Letzte Aktualisierung: 25. Juli 2025
Für weitere Informationen zur Produktionsumgebung siehe README-PRODUCTION.md.