Aller au contenu
ecdsa.com
OpenSSL 3CLI OpenSSL

Message d’erreur

error:0A000126:SSL routines::unexpected eof while reading

Également affiché sous la forme

  • SSL routines::unexpected eof while reading

La CLI openssl affiche « <thread id>:error:0A000126:SSL routines::unexpected eof while reading:<source> » ; curl l’enveloppe sous la forme « curl: (56) OpenSSL SSL_read: … unexpected eof while reading, errno 0 », Python sous la forme « [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)

Ce que cela signifie

Le pair a fermé la connexion TCP sans envoyer d’abord l’alerte TLS close_notify, alors qu’OpenSSL attendait encore des données (pendant le handshake ou en plein flux). OpenSSL 3 signale cette situation comme une erreur, car une fermeture silencieuse est impossible à distinguer d’un attaquant qui tronque le flux ; OpenSSL 1.1.1 ne la signalait que par le chemin d’erreur des appels système.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Déterminer à quel moment la connexion se termine

    Si l’erreur apparaît avant qu’aucun certificat ne soit affiché, le serveur ou le réseau a refusé le handshake ; si elle apparaît après des données, le pair ou un équipement intermédiaire a coupé le flux.

    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.

    Pairs anciens que vous contrôlez : SSL_OP_IGNORE_UNEXPECTED_EOF

    OpenSSL 3 peut traiter une fermeture silencieuse comme une fin de flux normale. N’utilisez cette option que pour des pairs anciens précis dont le protocole détecte lui-même la troncature (par exemple Content-Length), car elle désactive la détection de troncature.

    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.

    Corriger le pair : fermer TLS proprement

    Envoyer close_notify avant de fermer la connexion supprime l’erreur pour tous les 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.

Erreurs associées

Parcourir toute la base de données des erreurs de signature