SSL TLS Verschlüsselung Erklärt
SSL/TLS: Verschlüsselung im Web verstehen
SSL/TLS macht das Web sicher. Aber wie funktioniert die Verschlüsselung eigentlich? Dieser Guide erklärt die Konzepte verständlich.
SSL vs. TLS
| Protokoll | Status |
|---|---|
| SSL 1.0, 2.0, 3.0 | ❌ Veraltet, unsicher |
| TLS 1.0, 1.1 | ❌ Veraltet (2020 deprecated) |
| TLS 1.2 | ✅ Sicher, weit verbreitet |
| TLS 1.3 | ✅ Aktuell, empfohlen |
SSL ist eigentlich Geschichte – wir sagen "SSL-Zertifikat", meinen aber TLS.
Wie der TLS-Handshake funktioniert
Browser Server | | |---- Client Hello ------------>| Unterstützte Verschlüsselung | | |<--- Server Hello -------------| Gewählte Verschlüsselung |<--- Zertifikat --------------| Server-Zertifikat |<--- Server Hello Done -------| | | |---- Key Exchange ------------>| Verschlüsselter Pre-Master Secret |---- Change Cipher Spec ------>| |---- Finished --------------->| | | |<--- Change Cipher Spec ------| |<--- Finished ----------------| | | |====== Verschlüsselte Verbindung ======|
Was ein Zertifikat enthält
Certificate:
Data:
Subject: CN=example.com, O=Example Inc
Issuer: CN=Let's Encrypt Authority X3
Validity:
Not Before: Jan 1 00:00:00 2024 GMT
Not After: Apr 1 00:00:00 2024 GMT
Public Key: RSA 2048 bit
Extensions:
Subject Alternative Names: example.com, www.example.com
Key Usage: Digital Signature, Key Encipherment
Signature Algorithm: SHA256withRSA
Signature: ...
Zertifikatstypen
| Typ | Validierung | Für wen? |
|---|---|---|
| DV (Domain Validated) | Nur Domain-Besitz | Blogs, kleine Websites |
| OV (Organization Validated) | + Firma geprüft | Unternehmen |
| EV (Extended Validation) | + Strenge Prüfung | Banken, E-Commerce |
Wildcard vs. SAN
# Wildcard: *.example.com # Gilt für: www.example.com, blog.example.com, shop.example.com # Gilt NICHT für: example.com (Root) oder sub.blog.example.com # SAN (Subject Alternative Name): Mehrere Domains # Gilt für: example.com, www.example.com, example.de
Zertifikatskette
Root CA (z.B. DigiCert)
↓ signiert
Intermediate CA (z.B. Let's Encrypt Authority X3)
↓ signiert
End-Entity Zertifikat (example.com)
Alle Zertifikate der Kette müssen korrekt konfiguriert sein!
Let's Encrypt Zertifikat
# Certbot installieren sudo apt install certbot python3-certbot-nginx # Zertifikat erstellen (Nginx) sudo certbot --nginx -d example.com -d www.example.com # Nur Zertifikat (ohne Auto-Config) sudo certbot certonly --webroot -w /var/www/html -d example.com # Wildcard (erfordert DNS Challenge) sudo certbot certonly --manual --preferred-challenges dns -d "*.example.com" # Auto-Renewal testen sudo certbot renew --dry-run # Zertifikat erneuern sudo certbot renew
Zertifikats-Dateien
/etc/letsencrypt/live/example.com/ ├── cert.pem # Ihr Zertifikat ├── chain.pem # Intermediate-Zertifikate ├── fullchain.pem # cert.pem + chain.pem (für Nginx) └── privkey.pem # Privater Schlüssel (GEHEIM!)
Nginx SSL-Konfiguration
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# Moderne Protokolle und Ciphers
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
# HSTS
add_header Strict-Transport-Security "max-age=31536000" always;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
# Session Cache
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
}
Zertifikat prüfen
# Online # ssllabs.com/ssltest # OpenSSL openssl s_client -connect example.com:443 # Zertifikat-Details openssl s_client -connect example.com:443 | openssl x509 -text # Ablaufdatum openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -dates # Mit curl curl -vI https://example.com 2>&1 | grep -i "expire\|subject"
Häufige Probleme
❌ Häufige SSL-Fehler:
- ERR_CERT_AUTHORITY_INVALID: Chain unvollständig
- ERR_CERT_DATE_INVALID: Zertifikat abgelaufen
- ERR_CERT_COMMON_NAME_INVALID: Domain stimmt nicht
- Mixed Content: HTTP-Ressourcen auf HTTPS-Seite
Selbstsigniertes Zertifikat (nur Dev)
# Nur für Entwicklung! openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout selfsigned.key \ -out selfsigned.crt \ -subj "/CN=localhost"
💡 Tipp:
Prüfen Sie Ihr SSL-Zertifikat regelmäßig mit dem Enjyn Domain Toolkit auf Ablaufdatum und Konfiguration.