SSL/TLS richtig konfigurieren: Von A+ bei SSL Labs bis HSTS
Zurück
Einleitung: Warum SSL/TLS heute mehr ist als nur das grüne Schloss
Das grüne Schloss war gestern. Heute ist eine korrekte SSL/TLS-Konfiguration entscheidend für:
-
SEO-Ranking (Google bevorzugt sichere Seiten)
-
Kundenvertrauen (95% der Nutzer prüfen Sicherheitsindikatoren)
-
Performance (moderne Protokolle sind schneller!)
-
Compliance (DSGVO, PCI-DSS, etc.)
Die harte Wahrheit: 68% aller Websites haben Schwachstellen in ihrer SSL/TLS-Konfiguration. Sind Sie dabei?
Schritt 1: SSL-Test - Wo stehen Sie wirklich?
SSL Labs Test durchführen
text
1. Gehen Sie auf: https://www.ssllabs.com/ssltest/ 2. Geben Sie Ihre Domain ein 3. Warten Sie auf das Ergebnis 4. Notieren Sie Ihren aktuellen Score (A-F)
Typische Probleme bei B oder schlechter:
text
❌ TLS 1.0/1.1 aktiv (veraltet, unsicher) ❌ Schwache Cipher Suites (RC4, 3DES) ❌ Kein HSTS (HTTP Strict Transport Security) ❌ Kein OCSP Stapling ❌ Falsche Zertifikatskette
Schritt 2: Die perfekte Nginx-Konfiguration
Basis-Konfiguration für A+ Rating
nginx
# /etc/nginx/sites-available/your-site
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name ihre-domain.de www.ihre-domain.de;
# Zertifikate
ssl_certificate /etc/ssl/certs/ihre-domain.de.crt;
ssl_certificate_key /etc/ssl/private/ihre-domain.de.key;
# SSL Session Cache für Performance
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# Moderne Protokolle (nur TLS 1.2/1.3)
ssl_protocols TLSv1.2 TLSv1.3;
# Moderne Cipher Suites
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;
# DH Parameter (starker Schlüsselaustausch)
ssl_dhparam /etc/nginx/dhparam.pem;
# HSTS - HTTP Strict Transport Security
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
# Weitere Security Headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# OCSP Stapling für bessere Performance
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/ssl/certs/ihre-domain.de.chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# Rest der Konfiguration...
}
DH Parameter generieren (einmalig)
bash
# 4096-bit DH Parameter generieren (kann 5-10 Minuten dauern) sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096 # Alternative: 2048-bit für weniger Rechenleistung sudo openssl dhparam -out /etc/nginx/dhparam.pem 2048
Schritt 3: Apache-Konfiguration für A+ Rating
Apache 2.4+ Konfiguration
apache
# /etc/apache2/sites-available/your-site.conf
<VirtualHost *:443>
ServerName ihre-domain.de
ServerAlias www.ihre-domain.de
# Zertifikate
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ihre-domain.de.crt
SSLCertificateKeyFile /etc/ssl/private/ihre-domain.de.key
SSLCertificateChainFile /etc/ssl/certs/ihre-domain.de.chain.pem
# Moderne Protokolle
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder off
# Moderne Cipher Suites
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
# DH Parameter
SSLOpenSSLConfCmd DHParameters "/etc/apache2/dhparam.pem"
# HSTS Header
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
# Weitere Security Headers
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
# OCSP Stapling
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Rest der Konfiguration...
</VirtualHost>
Schritt 4: HSTS verstehen und richtig implementieren
Was ist HSTS?
text
HTTP Strict Transport Security zwingt Browser: • IMMER HTTPS zu verwenden • Selbst wenn User http:// eingibt • Cookie-Hijacking verhindern • Zertifikatsfehler blockieren
Die HSTS Direktive erklärt
nginx
# 63072000 Sekunden = 2 Jahre # includeSubDomains = Alle Subdomains # preload = Aufnahme in Browser-Preload-Liste add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
⚠️ WICHTIGE HSTS-WARNUNGEN:
-
Preload ist irreversibel für ~3 Monate
-
Testen Sie auf Staging vor Produktivumgebung
-
Zertifikat muss immer gültig sein
-
includeSubDomains betrifft ALLE Subdomains
Preload-Liste eintragen (erst nach Testing!)
text
1. Website muss HSTS mit 'preload' senden 2. Gehen Sie auf: https://hstspreload.org/ 3. Domain eingeben und prüfen 4. Bei Erfolg: Submit zur Aufnahme
Schritt 5: Zertifikatsmanagement - Let's Encrypt mit Certbot
Automatische Erneuerung einrichten
bash
# Certbot installieren sudo apt update sudo apt install certbot python3-certbot-nginx # Zertifikat erstellen (Nginx) sudo certbot --nginx -d ihre-domain.de -d www.ihre-domain.de # Automatische Erneuerung testen sudo certbot renew --dry-run # Cronjob für automatische Erneuerung sudo crontab -e # Einfügen: 0 12 * * * /usr/bin/certbot renew --quiet
Wildcard-Zertifikate mit DNS-Challenge
bash
# Cloudflare Beispiel sudo certbot certonly \ --manual \ --preferred-challenges=dns \ --server https://acme-v02.api.letsencrypt.org/directory \ -d '*.ihre-domain.de' -d ihre-domain.de
Schritt 6: Performance-Optimierung
TLS 1.3 - Der Performance-Booster
text
Vorteile von TLS 1.3: • 1-RTT Handshake (statt 2) • 0-RTT Resumption (für wiederkehrende Besucher) • Wenner Cipher Suites • Bessere Sicherheit
Konfiguration für optimale Performance
nginx
# Session Resumption für wiederkehrende Besucher ssl_session_cache shared:SSL:50m; ssl_session_timeout 1d; # TLS 1.3 0-RTT (vorsichtig verwenden!) ssl_early_data on; # Nur für idempotente Requests! # OCSP Stapling (verhindert externe Abfragen) ssl_stapling on; ssl_stapling_verify on;
Monitoring der SSL-Performance
bash
# Verbindungszeiten testen openssl s_time -connect ihre-domain.de:443 -new # Cipher Suite Test nmap --script ssl-enum-ciphers -p 443 ihre-domain.de # Zertifikatsinformationen openssl s_client -connect ihre-domain.de:443 -servername ihre-domain.de
Schritt 7: Security Headers - Das Rundum-Sorglos-Paket
Die 7 essentiellen Security Headers
nginx
# 1. HSTS (bereits oben) add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; # 2. Clickjacking-Schutz add_header X-Frame-Options "SAMEORIGIN" always; # 3. MIME-Type Sniffing verhindern add_header X-Content-Type-Options "nosniff" always; # 4. XSS-Schutz (ältere Browser) add_header X-XSS-Protection "1; mode=block" always; # 5. Referrer Policy add_header Referrer-Policy "strict-origin-when-cross-origin" always; # 6. Content Security Policy (CSP) - Individual! add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://ajax.googleapis.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:;" always; # 7. Permissions Policy (früher Feature Policy) add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
Schritt 8: Mixed Content vermeiden
Das Problem mit gemischtem Inhalt
text
HTTPS Seite lädt: • Bilder per HTTP ❌ • Scripts per HTTP ❌ • Stylesheets per HTTP ❌ Browser zeigt: "Unsicher" trotz SSL!
Lösung: Content Security Policy (CSP)
nginx
# CSP die HTTP blockiert add_header Content-Security-Policy "default-src https: data: 'unsafe-inline' 'unsafe-eval';" always;
Automatische Umleitung von HTTP zu HTTPS
nginx
server {
listen 80;
listen [::]:80;
server_name ihre-domain.de www.ihre-domain.de;
# 301 Permanent Redirect zu HTTPS
return 301 https://$server_name$request_uri;
}
Schritt 9: Monitoring und Wartung
Automatisches Monitoring-Script
bash
#!/bin/bash
# /etc/cron.weekly/ssl-check.sh
DOMAIN="ihre-domain.de"
LOG="/var/log/ssl-check.log"
EMAIL="admin@ihredomain.de"
echo "=== SSL Check für $DOMAIN am $(date) ===" > $LOG
# 1. Zertifikatsablauf prüfen
DAYS_LEFT=$(echo | openssl s_client -connect $DOMAIN:443 2>/dev/null | openssl x509 -noout -dates | grep 'notAfter' | cut -d'=' -f2)
echo "Zertifikat läuft ab: $DAYS_LEFT" >> $LOG
# 2. SSL Labs Test anstoßen (nur Summary)
echo "" >> $LOG
curl -s "https://api.ssllabs.com/api/v3/analyze?host=$DOMAIN&publish=off&fromCache=on&maxAge=24" | jq '.endpoints[0].grade' >> $LOG
# 3. Security Headers prüfen
echo "" >> $LOG
echo "=== Security Headers ===" >> $LOG
curl -sI https://$DOMAIN | grep -i "strict-transport-security\|x-frame-options\|content-security-policy" >> $LOG
# Email bei Problemen
if grep -q "F\|C\|D\|E" $LOG; then
mail -s "SSL PROBLEM bei $DOMAIN" $EMAIL < $LOG
fi
Schritt 10: Troubleshooting - Häufige Probleme
Problem 1: Zertifikatskette unvollständig
text
Lösung: cat domain.crt intermediate.crt root.crt > fullchain.crt
Problem 2: HSTS zu früh aktiviert
text
Symptom: Kein HTTP-Zugriff mehr möglich Notfall-Lösung: 1. Lokal: chrome://net-internals/#hsts 2. Domain delete eingeben 3. Oder: Warten bis max-age abläuft
Problem 3: TLS 1.3 funktioniert nicht
bash
# Prüfen ob OpenSSL 1.1.1+ openssl version # Nginx/Apache neu kompilieren falls nötig
Problem 4: OCSP Stapling Fehler
bash
# Manuell testen openssl s_client -connect ihre-domain.de:443 -status # OCSP Responder prüfen openssl x509 -in cert.pem -noout -ocsp_uri
Checkliste: Ihr Weg zu A+
✅ Basis-Check (heute)
-
SSL Labs Test durchgeführt
-
HTTP → HTTPS Umleitung aktiv
-
TLS 1.0/1.1 deaktiviert
-
Schwache Ciphers entfernt
✅ Fortgeschritten (diese Woche)
-
HSTS implementiert (ohne preload)
-
Security Headers gesetzt
-
OCSP Stapling aktiviert
-
DH Parameter generiert
✅ Expert-Level (diesen Monat)
-
CSP individuell angepasst
-
TLS 1.3 optimiert
-
Monitoring eingerichtet
-
HSTS preload geprüft (nicht aktiviert!)
✅ Wartung (kontinuierlich)
-
Automatische Zertifikatsverlängerung
-
Quartalsweise SSL-Tests
-
Security Headers aktuell halten
-
Logs überwachen
Bonus: Konfigurationstools für Einsteiger
Mozilla SSL Configuration Generator
text
https://ssl-config.mozilla.org/ • Nginx/Apache Konfiguration generieren • Unterschiedliche Security Level • Moderne/Intermediate/Old Kompatibilität
Cipher Suite Empfehlungen
bash
# Aktuelle Best Practices abrufen curl -s https://ciphersuite.info/api/cs/current/ | jq '.suites[] | select(.security == "secure")'
Fazit: SSL/TLS ist nie "fertig"
Die Wahrheit über SSL/TLS:
-
Es ist ein laufender Prozess, nicht ein einmaliges Setup
-
Sicherheitsstandards entwickeln sich weiter (Quantum Computing!)
-
Performance-Optimierung ist Teil der Sicherheit
-
Monitoring verhindert Überraschungen
Ihre drei wichtigsten Maßnahmen:
-
Automatische Tests (SSL Labs wöchentlich)
-
Automatische Updates (Certbot + Cron)
-
Security Headers (nie vergessen!)
Bei NexoraHost: In unseren Managed Hosting Paketen übernehmen wir die komplette SSL/TLS Konfiguration und Wartung. Inklusive automatischer A+ Rating-Optimierung und HSTS Management.
Haben Sie Fragen zur optimalen SSL-Konfiguration für Ihre Infrastruktur? Unser Security-Team analysiert gerne Ihre aktuelle Konfiguration und erstellt einen individuellen Optimierungsplan - oft mit sofortiger Verbesserung des SSL Labs Scores.
Weitere Blogartikel
Du suchst nach einem neuen Server oder Webhosting und wirst von günstigen Lockangeboten überschüttet? Vorsicht – was auf den ersten Blick wie ein Schnäppchen aussieht, kann langfristig zu einer teuren Überraschung werden. Wir zeigen d...
Was ist eigentlich... Webspace? Einfach erklärt (nicht nur für Oma!) Hast du schon mal von Webspace gehört und gedacht: "Was soll das sein?" Keine Sorge, du bist nicht allein. Viele Leute wissen nicht, was das ist - dabei nutzen sie es jeden Tag....
Du hast bereits erste Erfahrungen mit Minecraft Servern gesammelt und möchtest jetzt deinen eigenen, professionellen Server aufsetzen? Egal ob du mit Mods, Plugins oder im klassischen Vanilla-Stil spielen willst – dieser Guide führt dich durch die wichtigsten...