Zum Inhalt springen
ecdsa.com
OpenSSL 3 (openssl s_client and any OpenSSL-based client)OpenSSL-CLI

Fehlermeldung

SSL routines:tls_validate_record_header:wrong version number

Auch ausgegeben als

  • error:0A00010B:SSL routines:ssl3_get_record:wrong version number
  • error:0A00010B:SSL routines::wrong version number
  • error:1408F10B:SSL routines:ssl3_get_record:wrong version number

OpenSSL 3.5 nennt die Funktion tls_validate_record_header, OpenSSL 3.0 ssl3_get_record („error:0A00010B:SSL routines:ssl3_get_record:wrong version number“), OpenSSL 1.1.1 verwendet den älteren Code 1408F10B. Anwendungen, die Fehler ohne den Funktionsnamen formatieren (curl, Meldungen von Node.js), geben „error:0A00010B:SSL routines::wrong version number“ aus. Das Präfix vor „error:“ ist eine Thread-ID und das Suffix eine Position im Quellcode; beide variieren.

OpenSSL 3 (openssl s_client and any OpenSSL-based client) — SSL_R_WRONG_VERSION_NUMBER

Was der Fehler bedeutet

OpenSSL hat einen TLS-Record erwartet und das Feld für die Protokollversion im Header geprüft, aber die empfangenen Bytes sind überhaupt kein TLS – meist der Anfang einer HTTP-Antwort oder die Textbegrüßung eines Mailservers, als Versionsnummer gelesen. Der Name führt in die Irre: Die Gegenstelle spricht auf diesem Port ein anderes Protokoll (oder Klartext), keine nicht unterstützte TLS-Version.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    -starttls für Protokolle mit In-Band-Upgrade verwenden

    openssl s_client unterstützt smtp, imap, pop3, ftp, xmpp, ldap, postgres, mysql und weitere; damit beginnt der TLS-Handshake erst nach dem Upgrade-Befehl des Protokolls.

    bash
    # Protocols that upgrade in-band need -starttls
    openssl s_client -connect mail.example.com:587 -starttls smtp -servername mail.example.com </dev/null
    openssl s_client -connect db.example.com:5432 -starttls postgres </dev/null
    openssl s_client -connect ldap.example.com:389 -starttls ldap </dev/null
  2. 2.

    Nachsehen, was der Port tatsächlich sendet

    Zeigt netcat ein Textbanner oder eine HTTP-Statuszeile, spricht der Port kein implizites TLS.

    bash
    # What does the port answer with? A readable banner means it is not TLS
    printf 'HEAD / HTTP/1.0\r\n\r\n' | timeout 3 nc api.example.com 8080 | head -3
    timeout 3 nc mail.example.com 587 </dev/null | head -1     # "220 ... ESMTP" = SMTP, STARTTLS port
  3. 3.

    Mit dem Port für implizites TLS verbinden

    Verwende den TLS-Port des Protokolls, wenn der Client kein STARTTLS beherrscht.

    bash
    # Implicit TLS ports: 443 (HTTPS), 465 (SMTPS), 993 (IMAPS), 995 (POP3S), 636 (LDAPS)
    openssl s_client -connect mail.example.com:465 -servername mail.example.com -brief </dev/null

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen