Fehlermeldung
error:0A000126:SSL routines::unexpected eof while reading
Auch ausgegeben als
- SSL routines::unexpected eof while reading
Die OpenSSL-CLI gibt „<thread id>:error:0A000126:SSL routines::unexpected eof while reading:<source>“ aus; curl verpackt die Meldung als „curl: (56) OpenSSL SSL_read: … unexpected eof while reading, errno 0“, Python als „[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol“.
OpenSSL 3 — SSL_R_UNEXPECTED_EOF_WHILE_READING (peer closed the TCP connection without close_notify)
Was der Fehler bedeutet
Die Gegenstelle hat die TCP-Verbindung geschlossen, ohne vorher den TLS-Alert close_notify zu senden, während OpenSSL noch auf Daten wartete (im Handshake oder mitten im Datenstrom). OpenSSL 3 meldet das als Fehler, weil sich ein stilles Schließen nicht von einem Angreifer unterscheiden lässt, der den Datenstrom abschneidet; OpenSSL 1.1.1 hat es nur über den Fehlerpfad der Systemaufrufe gemeldet.
Warum der Fehler auftritt
Der Server hat die Verbindung abgelehnt oder verworfen
häufigServer, die einen unerwünschten Handshake (unbekanntes SNI, keine gemeinsame Version) schließen, statt einen Alert zu senden, oder die mitten in der Antwort abstürzen oder in ein Timeout laufen.
Eine Firewall, ein Proxy oder ein Load Balancer hat die Verbindung gekappt
häufigLeerlauf-Timeouts, Verbindungslimits und TLS-filternde Firewalls beenden TCP-Verbindungen ohne TLS-Shutdown.
Eine veraltete Gegenstelle, die nie close_notify sendet
gelegentlichManche eingebetteten Server und alte Implementierungen schließen den Socket nach jeder Antwort ohne TLS-Shutdown; mit OpenSSL 3 endet jede solche Antwort mit diesem Fehler.
So behebst du den Fehler
- 1.
Herausfinden, wann die Verbindung endet
Erscheint der Fehler, bevor überhaupt ein Zertifikat angezeigt wird, hat der Server oder das Netzwerk den Handshake abgelehnt; erscheint er, nachdem bereits Daten geflossen sind, hat die Gegenstelle oder eine Middlebox den Datenstrom gekappt.
bash # During the handshake (no certificate printed) -> the server or network refused the connection # After data was exchanged -> the peer stopped mid-stream echo | openssl s_client -connect api.example.com:443 -servername api.example.com -state 2>&1 | grep -E 'SSL_connect|error' - 2.
Veraltete Gegenstellen, die du verwaltest: SSL_OP_IGNORE_UNEXPECTED_EOF
OpenSSL 3 kann ein stilles Schließen als normales Ende des Datenstroms behandeln. Nutze die Option nur für bestimmte veraltete Gegenstellen, bei denen das Protokoll selbst erkennt, dass Daten abgeschnitten wurden (zum Beispiel über Content-Length), denn sie schaltet die Erkennung abgeschnittener Datenströme ab.
python # Only for peers you control that close without close_notify (legacy embedded servers): # OpenSSL 3 option SSL_OP_IGNORE_UNEXPECTED_EOF, exposed by Python 3.10+ as ssl.OP_IGNORE_UNEXPECTED_EOF import ssl ctx = ssl.create_default_context() ctx.options |= ssl.OP_IGNORE_UNEXPECTED_EOF # truncation is then no longer detected - 3.
Gegenstelle korrigieren: TLS sauber beenden
Sendet die Gegenstelle close_notify vor dem Schließen, verschwindet der Fehler für alle Clients.
text Server code: call SSL_shutdown() (or the library's close/unwrap) before closing the socket, and delimit HTTP responses with Content-Length or chunked encoding.
Verwandte Fehler
curl: (56) OpenSSL SSL_read: error:0A000126:SSL routines::unexpected eof while…curl (OpenSSL 3 backend)[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocolPython ssl module (OpenSSL)Client network socket disconnected before secure TLS connection was establishedNode.js tls / https / fetchGnuTLS recv error (-110): The TLS connection was non-properly terminated.git over HTTPS with libcurl-gnutls (Debian, Ubuntu)