Pular para o conteúdo
ecdsa.com
Go crypto/tls server (net/http ErrorLog)Go

Mensagem de erro

tls: client offered only unsupported versions: [301]

O net/http a escreve como “http: TLS handshake error from <client address>: tls: client offered only unsupported versions: [301]”; a lista mostra todas as versões que o cliente ofereceu (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

O que significa

Um servidor TLS em Go recebeu um ClientHello que oferecia apenas versões do protocolo abaixo do mínimo dele, aqui o TLS 1.0 (código de versão 301). Por padrão, servidores Go aceitam TLS 1.2 e 1.3, então o handshake é recusado com um alerta protocol_version e o net/http registra esta linha no log. O cliente do outro lado está desatualizado ou está sondando o servidor de propósito.

Por que acontece

Como corrigir

  1. 1.

    Descobrir quem envia esses handshakes

    Agrupe as linhas do log por endereço do cliente: poucos endereços conhecidos indicam clientes desatualizados que precisam ser atualizados; muitos endereços desconhecidos indicam 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.

    Manter o TLS 1.2 como mínimo do servidor

    Não reduza o MinVersion para acomodar scanners; em vez disso, atualize os poucos clientes antigos legítimos.

    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.

    Separar o ruído de handshakes

    O http.Server.ErrorLog recebe os erros de handshake; direcioná-lo para um logger dedicado mantém os logs da aplicação legíveis.

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

Erros relacionados

Ver toda a base de erros de assinatura