Aller au contenu
ecdsa.com
OpenSSL 3 (openssl s_client and any OpenSSL-based client)CLI OpenSSL

Message d’erreur

SSL routines:tls_validate_record_header:wrong version number

Également affiché sous la forme

  • 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 nomme la fonction tls_validate_record_header, OpenSSL 3.0 ssl3_get_record (« error:0A00010B:SSL routines:ssl3_get_record:wrong version number »), et OpenSSL 1.1.1 utilise l’ancien code 1408F10B. Les applications qui formatent les erreurs sans le nom de la fonction (curl, messages de Node.js) affichent « error:0A00010B:SSL routines::wrong version number ». Le préfixe avant « error: » est un identifiant de thread et le suffixe un emplacement dans le code source ; tous deux varient.

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

Ce que cela signifie

OpenSSL attendait un enregistrement TLS et a contrôlé le champ de version du protocole de l’en-tête, mais les octets reçus ne sont pas du TLS du tout : généralement le début d’une réponse HTTP ou le message d’accueil textuel d’un serveur de messagerie, lu comme s’il s’agissait d’un numéro de version. Le nom de l’erreur est trompeur : le pair parle un autre protocole (ou du texte en clair) sur ce port, il ne s’agit pas d’une version de TLS non prise en charge.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Utiliser -starttls pour les protocoles qui passent à TLS en cours de connexion

    L’option -starttls d’openssl s_client prend en charge smtp, imap, pop3, ftp, xmpp, ldap, postgres, mysql et d’autres protocoles ; avec elle, le handshake TLS commence après la commande de passage à TLS propre au protocole.

    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.

    Regarder ce que le port envoie réellement

    Une bannière texte ou une ligne d’état HTTP obtenue avec netcat montre que le port n’utilise pas TLS implicite.

    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.

    Se connecter au port TLS implicite

    Utilisez le port TLS du protocole lorsque le client ne prend pas en charge STARTTLS.

    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

Erreurs associées

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