Zum Inhalt springen
ecdsa.com
Node.js tls.connect / fetch (undici)Node.js crypto

Fehlermeldung

code: 'ERR_SSL_WRONG_VERSION_NUMBER'

Auch ausgegeben als

  • ERR_SSL_WRONG_VERSION_NUMBER

Die vollständige Meldung enthält eine Thread-ID und einen Quellpfad, etwa „60747095FFFF0000:error:0A00010B:SSL routines:tls_validate_record_header:wrong version number:../deps/openssl/openssl/ssl/record/methods/tlsany_meth.c:77:“, suche deshalb nach dem Code. tls.connect() und fetch() setzen den Code ERR_SSL_WRONG_VERSION_NUMBER; https.request() meldet denselben Grund als „write EPROTO …“ mit dem Code EPROTO.

Node.js tls.connect / fetch (undici) — OpenSSL SSL_R_WRONG_VERSION_NUMBER; https.request reports it as write EPROTO

Was der Fehler bedeutet

Node.js hat einen TLS-Handshake begonnen, und die Antwort war kein TLS-Record, deshalb ist OpenSSL beim Prüfen des Record-Headers gescheitert. Die Gegenseite spricht auf diesem Port Klartext: ein HTTP-Server, ein Proxy, der einfaches HTTP erwartet, oder ein SMTP-Server vor STARTTLS. Trotz des Namens ist mit Zertifikaten und TLS-Versionen alles in Ordnung.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Herausfinden, was der Port spricht

    Frag den Port über http:// an; antwortet er, verwende http:// oder den echten TLS-Port.

    bash
    curl -si http://127.0.0.1:8080/ | head -1          # HTTP answers: use http:// or the TLS port
    openssl s_client -connect 127.0.0.1:8443 -brief </dev/null
  2. 2.

    Proxy-URLs mit http:// angeben

    Das Schema der Proxy-URL beschreibt die Verbindung zum Proxy, nicht zum Ziel; HTTPS-Ziele bekommen trotzdem Ende-zu-Ende-TLS durch den Tunnel.

    bash
    # Proxy URLs for HTTPS traffic normally start with http:// (CONNECT tunnel)
    export HTTPS_PROXY=http://proxy.example.net:3128
    npm config set https-proxy http://proxy.example.net:3128
  3. 3.

    Mail: STARTTLS auf 587, implizites TLS auf 465 verwenden

    Bei nodemailer gehört secure: true zu Port 465; auf 587 lass secure: false stehen und erzwinge STARTTLS.

    js
    // SMTP: secure: true only for implicit TLS (465); 587 upgrades with STARTTLS
    import nodemailer from "nodemailer";
    
    const transport = nodemailer.createTransport({ host: "smtp.example.com", port: 587, secure: false, requireTLS: true });

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen