Zum Inhalt springen
ecdsa.com
OpenSSL 3OpenSSL-CLI

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

So behebst du den Fehler

  1. 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. 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. 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

Gesamte Signaturfehler-Datenbank durchsuchen