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
Clients obsolètes
fréquenteAppareils anciens, vieilles applications Java 6/7 ou .NET Framework, et clients HTTP embarqués qui ne gèrent pas TLS 1.2.
Scanners Internet et outils de sécurité
fréquenteLes scanners proposent délibérément d’anciennes versions pour classer les serveurs ; sur des points de terminaison publics, de telles lignes provenant de nombreuses adresses différentes sont normales.
Clients configurés pour une ancienne version
occasionnelleApplications dont le réglage de protocole est figé sur TLS 1.0 pour une ancienne intégration disparue depuis longtemps.
Comment corriger l’erreur
- 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.
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.
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)