Aller au contenu
ecdsa.com
Go crypto/tls server (net/http ErrorLog)Go

Message d’erreur

tls: client offered only unsupported versions: [301]

net/http l’écrit sous la forme « http: TLS handshake error from <client address>: tls: client offered only unsupported versions: [301] » ; la liste indique toutes les versions proposées par le client (300 = SSL 3.0, 301 = TLS 1.0, 302 = TLS 1.1).

Go crypto/tls server (net/http ErrorLog) — the client offered only TLS versions below the server's minimum

Ce que cela signifie

Un serveur TLS Go a reçu un ClientHello qui ne proposait que des versions du protocole inférieures à son minimum, ici TLS 1.0 (code de version 301). Par défaut, les serveurs Go acceptent TLS 1.2 et 1.3 : le handshake est donc refusé avec une alerte protocol_version, et net/http consigne cette ligne. Le client à l’autre bout est obsolète ou sonde délibérément le serveur.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Identifier qui les envoie

    Regroupez les lignes de journal par adresse client : quelques adresses connues signalent des clients obsolètes à mettre à jour ; de nombreuses adresses inconnues signalent des scanners.

    bash
    # Which addresses send these handshakes, and how often?
    journalctl -u myservice --since today | grep 'client offered only unsupported versions' \
      | grep -oE 'from [0-9a-f.:]+' | sort | uniq -c | sort -rn | head
  2. 2.

    Garder TLS 1.2 comme minimum côté serveur

    N’abaissez pas MinVersion pour satisfaire les scanners ; mettez plutôt à jour les quelques anciens clients légitimes.

    go
    // Keep TLS 1.2 as the minimum (Go's server default); set it explicitly to document intent
    srv := &http.Server{Addr: ":443", TLSConfig: &tls.Config{MinVersion: tls.VersionTLS12}}
  3. 3.

    Isoler le bruit des handshakes

    http.Server.ErrorLog reçoit les erreurs de handshake ; le diriger vers un logger dédié garde les journaux de l’application lisibles.

    go
    // Route handshake noise from scanners to a separate logger instead of the main log
    srv.ErrorLog = log.New(handshakeLogWriter, "tls: ", 0)

Erreurs associées

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