ERR_SSL_VERSION_OR_CIPHER_MISMATCH: Ursachen und Lösungen
ERR_SSL_VERSION_OR_CIPHER_MISMATCH bedeutet, Browser und Server haben beide genug vom TLS-Handshake abgeschlossen, um unterstützte Protokollversionen und Cipher zu vergleichen, und keine Überschneidung gefunden. Das ist ein spezifischerer Fall als ein generischer Handshake-Fehler: Beide Seiten haben gesprochen, sie können sich nur nicht einigen, wie die Verbindung verschlüsselt wird.
Was ERR_SSL_VERSION_OR_CIPHER_MISMATCH bedeutet
Während eines TLS-Handshakes listet das ClientHello des Clients jede TLS-Version und Cipher Suite auf, die er nutzen will, und der Server wählt eine aus dieser Liste, die er ebenfalls unterstützt. Dieser Fehler tritt auf, wenn die Liste des Servers und die des Clients überhaupt nichts gemeinsam haben, meist weil der Server nur alte, veraltete Optionen anbietet (TLS 1.0, TLS 1.1, oder Cipher wie RC4 oder 3DES), die aktuelle Browser aus Sicherheitsgründen nicht mehr aushandeln. Moderne Browser streichen die Unterstützung für diese älteren Optionen seit Jahren schrittweise, ein Server, der seine TLS-Konfiguration nie aktualisiert hat, scheitert also zunehmend auf diese Weise bei ganz normalen, aktuellen Besuchern.
Wie sich der Fehler zeigt
Chrome und Edge zeigen "This page isn't working - example.com sent an invalid response" oder, genauer, "ERR_SSL_VERSION_OR_CIPHER_MISMATCH". Firefox zeigt üblicherweise "Secure Connection Failed" mit dem Code SSL_ERROR_NO_CYPHER_OVERLAP, der das Problem direkt benennt.
openssl s_client, das eine bestimmte TLS-Version erzwingt, zeigt genau, welche Versionen der Server akzeptiert und ablehnt:
openssl s_client -connect example.com:443 -tls1_2
CONNECTED(00000003)
...
New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Verify return code: 0 (ok)
openssl s_client -connect example.com:443 -tls1
CONNECTED(00000003)
140... error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version
Ein "protocol version"- oder "handshake failure"-Alert bei einer Version und eine saubere Verbindung bei einer anderen zeigt genau, welche Versionen der Server unterstützt. nmaps SSL-Skript geht weiter und listet auf einmal jeden Cipher auf, den der Server anbietet:
nmap --script ssl-enum-ciphers -p 443 example.com
| ssl-enum-ciphers:
| TLSv1.0:
| ciphers:
| TLS_RSA_WITH_RC4_128_SHA - C
| TLSv1.2:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - A
Was ERR_SSL_VERSION_OR_CIPHER_MISMATCH verursacht
- Der Server bietet nur TLS 1.0 oder 1.1 an. Große Browser haben die Standardunterstützung für beide Versionen vor Jahren gestrichen; ein Server, der seine Konfiguration nie aktualisiert hat, teilt sich nun keine gemeinsame Protokollversion mit einem aktuellen Browser.
- Der Server bietet nur schwache oder veraltete Cipher an, etwa RC4 oder 3DES, die Browser unabhängig von der daneben angebotenen TLS-Version nicht mehr aushandeln.
- Eine Zertifikats- oder SNI-Fehlpassung auf Shared Hosting. Teilen sich mehrere Websites eine IP-Adresse, und kann der Server den angefragten Hostnamen (Server Name Indication) nicht dem richtigen Zertifikat und der richtigen Cipher-Konfiguration zuordnen, kann er den Handshake scheitern lassen, statt korrekt zurückzufallen.
- Cloudflares Zustand "no SSL certificate for this hostname yet", der auftritt, wenn eine Domain zu Cloudflare hinzugefügt und DNS dorthin gezeigt wurde, bevor die Zertifikatsausstellung abgeschlossen war; die Edge hat für diesen Hostnamen noch nichts Gültiges zum Aushandeln.
- Ein altes Betriebssystem oder ein alter Browser, der selbst nur ältere TLS-Versionen oder Cipher unterstützt, trifft auf einen modernen Server, der sie (korrekt) deaktiviert hat.
So finden Sie heraus, wer schuld ist
Testen Sie zuerst von einem anderen Gerät oder einem anderen Netzwerk aus; lädt die Website dort, ist das eigene Betriebssystem oder der Browser des Besuchers veraltet. Scheitert es überall, auch bei einem aktuellen, vollständig aktualisierten Browser, ist die TLS-Konfiguration des Servers die Ursache. Eine SSL-Prüfung von mehreren Standorten meldet die genauen Protokollversionen und Cipher, die der Server aus jedem Blickwinkel anbietet, in einem Durchgang, was schneller ist, als die openssl-Befehle manuell von verschiedenen Netzwerken zu wiederholen.
So beheben Sie ERR_SSL_VERSION_OR_CIPHER_MISMATCH
Wenn Sie Besucher sind
- Aktualisieren Sie Ihren Browser auf die neueste Version; das behebt die clientseitige Variante der Fehlpassung sofort.
- Aktualisieren Sie Ihr Betriebssystem, besonders unter Windows 7 oder älter, oder sehr alten Android- und iOS-Versionen, wo die System-TLS-Bibliothek selbst veraltet sein kann, unabhängig vom Browser.
- Probieren Sie ein anderes Gerät oder Netzwerk, um zu bestätigen, ob das Problem mit Ihnen reist oder bei der Website bleibt.
- Kontaktieren Sie den Website-Betreiber, falls der Fehlschlag überall gleich auftritt, wo Sie testen; eine veraltete Serverkonfiguration muss auf dieser Seite behoben werden, nicht im Browser umgangen.
Wenn Sie die Website betreiben
- Legen Sie explizit moderne Protokollversionen und Cipher fest. Bei nginx:
Entfernen Sie TLS 1.0, TLS 1.1, und jeden RC4- oder 3DES-Cipher-Eintrag komplett, statt sie nur nachzuordnen.ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_cipher off; - Braucht ein Legacy-Client tatsächlich noch TLS 1.0 oder 1.1 (manche älteren Zahlungsterminals oder Embedded-Geräte brauchen das), bedienen Sie ihn von einem separaten Hostnamen oder Listener mit eigenem akzeptiertem Risiko, statt die Konfiguration der Haupt-Website für jeden Besucher zu schwächen.
- Prüfen Sie die SNI-Konfiguration bei Shared Hosting oder einem Reverse-Proxy, der mehrere Zertifikate handhabt, und bestätigen Sie, dass jeder
server_name-Block auf das richtige Zertifikat abbildet und der Proxy nicht auf ein Standardzertifikat zurückfällt, das eine andere, inkompatible Cipher-Auswahl anbietet. - Nutzen Sie Cloudflare, und das fing gerade erst nach dem Hinzufügen der Domain an, prüfen Sie im Dashboard unter SSL/TLS > Edge Certificates den Status der Zertifikatsausstellung; der Zustand "no SSL certificate for this hostname yet" löst sich meist von selbst, sobald die Ausstellung abgeschlossen ist, üblicherweise innerhalb von Minuten bis wenigen Stunden.
- Laden Sie nach jeder Änderung neu und verifizieren Sie erneut:
nginx -t && systemctl reload nginx, dann führen Sie die obigen nmap- oder openssl-Befehle erneut aus, um zu bestätigen, dass die alten Versionen und Cipher tatsächlich weg sind, nicht nur neu geordnet.
Verwandte Fehler
- ERR_SSL_PROTOCOL_ERROR ist der breitere, weniger spezifische Handshake-Fehler: eine Nicht-TLS-Antwort auf dem Port, fehlerhafte Handshake-Daten, oder Abfangsoftware, statt eines sauberen Versions-/Cipher-Vergleichs, der einfach keine Überschneidung fand.
- ERR_CERT_DATE_INVALID passiert, nachdem ein Zertifikat tatsächlich empfangen und gelesen wurde, einen Schritt später als dieser Fehler, der nie so weit kommt.
So beugen Sie ERR_SSL_VERSION_OR_CIPHER_MISMATCH vor
Browser-Hersteller stellen die Unterstützung für ältere TLS-Versionen und Cipher regelmäßig nach eigenem Zeitplan ein, was bedeutet, dass eine Serverkonfiguration, die letztes Jahr einwandfrei funktionierte, für einen wachsenden Anteil der Besucher scheitern kann, ohne dass sich auf der Serverseite überhaupt etwas ändert. Eine Zertifikats- und SSL-Prüfung meldet bei jedem Lauf das ausgehandelte Protokoll und den Cipher, von über 300 Prüfpunkten in 158 Städten, und erkennt einen Server, der auf eine veraltete Konfiguration abgedriftet ist, bevor er echten Traffic betrifft. HostTracker alarmiert per E-Mail, SMS, Sprachanruf, Slack, Telegram und mehr, sobald eine Prüfung scheitert.
Häufig gestellte Fragen
Ist das dasselbe wie ein Fehler wegen eines abgelaufenen Zertifikats?
Nein. Dieser Fehler passiert während der Protokoll- und Cipher-Aushandlung, bevor das Zertifikat selbst überhaupt beurteilt wird. Ein abgelaufenes Zertifikat wäre ein separater Fehler, der einen Schritt später im Handshake auftritt.
Warum betrifft das nur Besucher mit alten Computern?
Weil ein veraltetes Betriebssystem oder ein veralteter Browser vielleicht nur TLS 1.0, TLS 1.1, oder ältere Cipher unterstützt, die ein korrekt gehärteter moderner Server nicht mehr anbietet, was eine saubere Versions-/Cipher-Fehlpassung erzeugt, die spezifisch für diesen veralteten Client ist.
Sollte ich TLS 1.0 wieder aktivieren, um das für alte Besucher zu beheben?
Im Allgemeinen nicht. TLS 1.0 und 1.1 haben bekannte Schwächen, und die meisten aktuellen Browser nutzen sie ohnehin nicht, ein erneutes Aktivieren fügt also hauptsächlich Risiko hinzu, ohne die Kompatibilität für die Mehrheit der betroffenen Besucher wiederherzustellen, deren tatsächliches Problem ein veralteter Browser oder ein veraltetes Betriebssystem ist.
Was bedeutet Cloudflares Meldung "no SSL certificate for this hostname yet" konkret?
Sie bedeutet, DNS für die Domain zeigt bereits auf Cloudflare, aber die Zertifikatsausstellung für diesen Hostnamen ist noch nicht abgeschlossen, sodass Cloudflares Edge noch nichts Gültiges für den Handshake vorzuweisen hat. Das löst sich üblicherweise von selbst, sobald die Ausstellung abgeschlossen ist.
Wie finde ich heraus, welche Cipher mein Server derzeit anbietet, ohne zu raten?
Führen Sie nmap --script ssl-enum-ciphers -p 443 yourdomain.com aus, das jede Protokollversion und jeden Cipher auflistet, den der Server akzeptiert, zusammen mit einer Note für jeden, statt Versionen einzeln zu testen.