Zum Inhalt springen
ecdsa.com
Go crypto/tls server (net/http ErrorLog)Go

Fehlermeldung

tls: client offered only unsupported versions: [301]

net/http gibt die Meldung als „http: TLS handshake error from <client address>: tls: client offered only unsupported versions: [301]“ aus; die Liste zeigt jede Version, die der Client angeboten hat (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

Was der Fehler bedeutet

Ein Go-TLS-Server hat ein ClientHello erhalten, das nur Protokollversionen unterhalb seines Minimums angeboten hat, hier TLS 1.0 (Versionscode 301). Go-Server akzeptieren standardmäßig TLS 1.2 und 1.3, deshalb wird der Handshake mit dem Alert protocol_version abgelehnt, und net/http protokolliert diese Zeile. Der Client auf der anderen Seite ist veraltet oder sondiert den Server gezielt.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Herausfinden, wer sie sendet

    Gruppiere die Logzeilen nach Client-Adresse: Wenige bekannte Adressen bedeuten veraltete Clients, die du aktualisieren solltest; viele unbekannte Adressen bedeuten Scanner.

    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.

    TLS 1.2 als Minimum des Servers beibehalten

    Senke MinVersion nicht, um Scannern entgegenzukommen; aktualisiere stattdessen die wenigen legitimen alten Clients.

    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.

    Handshake-Rauschen abtrennen

    http.Server.ErrorLog erhält die Handshake-Fehler; leitest du es auf einen eigenen Logger um, bleiben die Anwendungslogs lesbar.

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

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen