Saltar al contenido
ecdsa.com
Node.js tls / https / fetchcrypto de Node.js

Mensaje de error

Client network socket disconnected before secure TLS connection was established

También se muestra como

  • code: 'ECONNRESET'

Con fetch() es la causa de «TypeError: fetch failed»; npm y yarn lo imprimen dentro de sus mensajes «request to … failed». Las mismas palabras con otro código (por ejemplo, ETIMEDOUT) apuntan a un tiempo de espera agotado y no a un restablecimiento.

Node.js tls / https / fetch — code ECONNRESET during the TLS handshake

Qué significa

El otro extremo (o algo intermedio) cerró la conexión TCP después de que Node.js enviara su ClientHello y antes de que terminara el handshake TLS. No llegó ninguna alerta TLS, así que Node.js no puede saber el motivo; informa de un restablecimiento de la conexión con el código ECONNRESET. El motivo está en el servidor, en un proxy o en un firewall, no en el certificado.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Comprobar la configuración del proxy

    Compara el entorno con lo que usa tu navegador (a menudo, un archivo PAC). Normalmente, las URL de proxy deberían ser http://, y los hosts internos deben ir en NO_PROXY.

    bash
    env | grep -i -E '^(https?|no)_proxy='
    npm config get proxy; npm config get https-proxy
    # Proxy URL with http:// and internal hosts in NO_PROXY
    export HTTPS_PROXY=http://proxy.example.net:3128 NO_PROXY=localhost,127.0.0.1,.internal.example.com
  2. 2.

    Repetir el handshake con openssl s_client

    Si s_client también se corta, el problema está en la red o en el servidor; cambia el SNI para ver si el servidor lo necesita.

    bash
    # Same handshake without Node.js: does the server or network cut it too?
    openssl s_client -connect api.example.com:443 -servername api.example.com -brief </dev/null
    openssl s_client -connect api.example.com:443 -noservername -brief </dev/null
  3. 3.

    Hacer que Node.js use las variables de entorno del proxy

    Las versiones recientes de Node.js respetan HTTP_PROXY, HTTPS_PROXY y NO_PROXY para http, https y fetch cuando se establece NODE_USE_ENV_PROXY=1; bibliotecas como axios, got o el ProxyAgent de undici tienen sus propias opciones de proxy.

    bash
    # Node.js does not use HTTPS_PROXY by itself; recent releases can be told to
    NODE_USE_ENV_PROXY=1 HTTPS_PROXY=http://proxy.example.net:3128 node app.js

Errores relacionados

Explorar toda la base de datos de errores de firma