Zum Inhalt springen
ecdsa.com
Node.js tls / https / fetchNode.js crypto

Fehlermeldung

Client network socket disconnected before secure TLS connection was established

Auch ausgegeben als

  • code: 'ECONNRESET'

Bei fetch() ist der Fehler die Ursache (cause) von „TypeError: fetch failed“; npm und yarn geben ihn innerhalb ihrer Meldungen „request to … failed“ aus. Derselbe Wortlaut mit einem anderen Code (zum Beispiel ETIMEDOUT) deutet eher auf einen Timeout als auf einen Reset hin.

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

Was der Fehler bedeutet

Die TCP-Verbindung wurde von der Gegenseite (oder von etwas dazwischen) geschlossen, nachdem Node.js sein ClientHello gesendet hatte und bevor der TLS-Handshake abgeschlossen war. Es kam kein TLS-Alert an, deshalb kann Node.js den Grund nicht nennen; es meldet einen Reset mit dem Code ECONNRESET. Der Grund liegt beim Server, einem Proxy oder einer Firewall, nicht im Zertifikat.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Proxy-Einstellungen prüfen

    Vergleiche die Umgebung mit dem, was dein Browser verwendet (oft eine PAC-Datei). Proxy-URLs sollten normalerweise mit http:// beginnen, und interne Hosts gehören in 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.

    Handshake mit openssl s_client wiederholen

    Wird auch s_client getrennt, liegt das Problem im Netzwerk oder beim Server; variiere SNI, um zu sehen, ob der Server es braucht.

    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.

    Node.js die Proxy-Umgebungsvariablen verwenden lassen

    Aktuelle Node.js-Releases berücksichtigen HTTP_PROXY, HTTPS_PROXY und NO_PROXY für http, https und fetch, wenn NODE_USE_ENV_PROXY=1 gesetzt ist; Bibliotheken wie axios, got oder der ProxyAgent von undici haben eigene Proxy-Optionen.

    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

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen