Was ist der SSL/TLS-Handshake?
Der SSL/TLS-Handshake ist eine Abfolge von Schritten, die zwischen Browser und Server ablaufen, bevor eine sichere Verbindung zustande kommt. Dabei werden die Identität geprüft sowie Protokoll und Verschlüsselungsverfahren festgelegt. Schlägt der Handshake fehl, kann keine sichere Verbindung aufgebaut werden.
Ablauf des TLS-Handshakes (4 Schritte)
- Client Hello: Der Browser sendet die von ihm unterstützten TLS-Versionen und Cipher Suites
- Server Hello: Der Server wählt eine TLS-Version und eine Cipher Suite aus und sendet sein Zertifikat
- Überprüfung: Der Browser prüft das Zertifikat und erzeugt das Pre-Master-Secret
- Abschluss: Beide Seiten erzeugen den Session Key, die verschlüsselte Kommunikation beginnt
Tritt in einem dieser Schritte ein Problem auf, kommt es zum Fehler „Handshake Failed“.
Ursache 1: Inkompatible Protokolle
Browser und Server können sich nicht auf eine gemeinsame TLS-Version einigen. Meist unterstützt der Server nur TLS 1.0/1.1, was moderne Browser nicht mehr akzeptieren.
Lösung
# Prüfen Sie, welche Protokolle der Server unterstützt
openssl s_client -connect domain.com:443 -tls1_2
openssl s_client -connect domain.com:443 -tls1_3
# Nginx: TLS 1.2 und 1.3 aktiv
ssl_protocols TLSv1.2 TLSv1.3;
# Apache: TLS 1.2 und 1.3 aktiv
SSLProtocol -all +TLSv1.2 +TLSv1.3
Ursache 2: Fehlerhafte Zertifikatskette
Fehlt ein Zwischenzertifikat oder ist die Reihenfolge falsch, schlägt die Überprüfung während des Handshakes fehl.
Lösung
# Zertifikatskette prüfen
openssl s_client -connect domain.com:443 -showcerts
# Fullchain-Datei erstellen (richtige Reihenfolge)
cat site.crt intermediate.crt > fullchain.pem
# Nginx
ssl_certificate /etc/ssl/fullchain.pem;
Ursache 3: Abgelaufenes Zertifikat
Ist die Gültigkeitsdauer des Zertifikats abgelaufen, kann der Handshake fehlschlagen.
# Ablaufdatum prüfen
openssl s_client -connect domain.com:443 | openssl x509 -noout -dates
# Ausgabe:
# notBefore=Jan 15 00:00:00 2026 GMT
# notAfter=Apr 15 23:59:59 2026 GMT
Ursache 4: Zertifikat und Key passen nicht zusammen
Passen SSL-Zertifikat und Private-Key-Datei nicht zusammen, kann der Server die Signatur während des Handshakes nicht bestätigen.
# Übereinstimmung prüfen
openssl x509 -noout -modulus -in cert.pem | openssl md5
openssl rsa -noout -modulus -in key.pem | openssl md5
# Beide MD5-Werte müssen identisch sein
Ursache 5: Eingriff durch Firewall oder IDS/IPS
Eine Firewall oder ein Intrusion-Detection-System kann SSL-Datenverkehr blockieren oder verfälschen.
Lösung
- Prüfen Sie, ob Port 443 offen ist:
telnet domain.com 443 - Durchsuchen Sie die Firewall-Logs nach SSL-bezogenen Blockierungen
- Kontrollieren Sie die Einstellungen zur SSL Inspection in den IDS/IPS-Regeln
Ursache 6: Überlasteter Server
Unter hoher Last kann der Server möglicherweise nicht genügend Ressourcen für den Handshake bereitstellen. Insbesondere der RSA Key Exchange beansprucht die CPU stark.
Lösung
- Verwenden Sie den ECDHE Key Exchange (schneller als RSA)
- Aktivieren Sie SSL Session Caching
- Nutzen Sie TLS 1.3 (schnellerer Handshake — 1-RTT)
# Nginx: Session caching
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets on;
Werkzeuge zur Fehlersuche
| Werkzeug | Einsatz |
|---|---|
openssl s_client | Detaillierte Handshake-Informationen und Fehlermeldungen |
| Wireshark | Analyse der TLS-Handshakes |
| SSL Labs | Umfassender webbasierter SSL-Test |
curl -vvv | Detaillierte Verbindungsinformationen im Verbose-Modus |
| DATASSL SSL Checker | Schnelle Prüfung der Zertifikatskette |
Fazit
Der Fehler SSL/TLS Handshake Failed kann mehrere Ursachen haben. Mit einem systematischen Vorgehen — zuerst die Gültigkeit des Zertifikats, dann die Kette und anschließend die Kompatibilität von Protokoll und Cipher prüfen — lässt sich das Problem schnell eingrenzen. Der Einsatz von TLS 1.3 und ECDHE erhöht die Sicherheit und verkürzt zugleich die Dauer des Handshakes.