meldestelle/config/ssl/README-de.md

7.7 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-Zertifikat
  • server.key - Privater Server-Schlüssel
  • ca.crt - Certificate Authority-Zertifikat

2. Redis TLS-Zertifikate

Platzieren Sie die folgenden Dateien in config/ssl/redis/:

  • redis.crt - Redis Server-Zertifikat
  • redis.key - Privater Redis Server-Schlüssel
  • ca.crt - Certificate Authority-Zertifikat
  • redis.dh - Diffie-Hellman Parameter

3. Keycloak HTTPS-Zertifikate

Platzieren Sie die folgenden Dateien in config/ssl/keycloak/:

  • server.crt.pem - Server-Zertifikat im PEM-Format
  • server.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-Zertifikat
  • prometheus.key - Privater Prometheus Server-Schlüssel
  • web.yml - Prometheus Web-Konfigurationsdatei

5. Grafana HTTPS-Zertifikate

Platzieren Sie die folgenden Dateien in config/ssl/grafana/:

  • server.crt - Grafana Server-Zertifikat
  • server.key - Privater Grafana Server-Schlüssel

6. Nginx SSL-Zertifikate

Platzieren Sie die folgenden Dateien in config/ssl/nginx/:

  • server.crt - Haupt-SSL-Zertifikat
  • server.key - Privater Haupt-SSL-Schlüssel
  • dhparam.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

  1. Certificate Signing Requests (CSRs) generieren
  2. CSRs an Ihre Certificate Authority übermitteln
  3. Signierte Zertifikate herunterladen
  4. Zertifikate in entsprechende Verzeichnisse platzieren

Option 3: Interne CA

Bei Verwendung einer internen Certificate Authority:

  1. CSRs für jeden Service generieren
  2. Zertifikate mit Ihrer internen CA signieren
  3. 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

  1. Neue Zertifikate generieren

  2. Alte Zertifikate in SSL-Verzeichnissen ersetzen

  3. Betroffene Services neu starten:

    docker-compose -f docker-compose.prod.yml restart nginx keycloak grafana prometheus
    

Sicherheits-Best-Practices

  1. Starke Verschlüsselung verwenden: Mindestens 2048-Bit RSA-Schlüssel oder 256-Bit ECDSA-Schlüssel verwenden
  2. Regelmäßige Rotation: Zertifikate regelmäßig rotieren (jährlich oder halbjährlich)
  3. Sichere Speicherung: Private Schlüssel sicher speichern und Zugriff beschränken
  4. Ablauf überwachen: Überwachung für Zertifikat-Ablauf einrichten
  5. HSTS verwenden: HTTP Strict Transport Security aktivieren
  6. Perfect Forward Secrecy: ECDHE-Cipher-Suites verwenden
  7. Certificate Transparency: CT-Logs auf unbefugte Zertifikate überwachen

Fehlerbehebung

Häufige Probleme

  1. Berechtigung verweigert

    # Dateiberechtigungen korrigieren
    sudo chown -R $USER:$USER config/ssl/
    chmod -R 755 config/ssl/
    chmod 600 config/ssl/*/server.key
    
  2. 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
    
  3. 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


Letzte Aktualisierung: 25. Juli 2025

Für weitere Informationen zur Produktionsumgebung siehe README-PRODUCTION.md.