Por que o Wireshark mostra a versão TLS 1.2 aqui em vez do TLS 1.3?

8

Estou acessando o servidor de teste TLS 1.3 " https://tls13.pinterjann.is " por meio de um cliente http java usando o TLS 1.3. Tudo parece funcionar bem, pois a resposta html indica:

Resposta HTML

O que eu não entendo: Por que o Wireshark mostra na visão geral o Protocolo TLSv1.3, mas nos detalhes Versão TLS 1.2?

O Wireshark está apenas exibindo a versão errada ou estou realmente usando o TLS 1.2?

Agradecemos antecipadamente por seu apoio.

Cliente Wireshark Wireshark HelloRetry Wireshark ClientHello 2 Servidor Wireshark

user120513
fonte
A sua cópia do Wireshark está atualizada?
Jesse P.
11
Sim, estou usando o Wireshark versão 2.6.5.
user120513
11
Curiosamente, ele disse 1,3 em uma linha, mas depois disse 1,0 em outra, depois 1,2 em outra. Você já tentou um utilitário de captura diferente, como o Fiddler?
Jesse P.
Não, eu não tentei outra ferramenta de captura. O Fiddler suporta a exibição de mensagens TLS 1.3?
user120513
BTW: Encontrei esta captura cloudshark.org/captures/64d433b1585a na internet, onde acontece a mesma coisa. Eu acho que é uma imprecisão na maneira como o Wireshark exibe a versão na seção de detalhes.
user120513

Respostas:

14

Desculpe, pela confusão, estava faltando a semântica exata do TLS 1.3: por exemplo, no Client Hello, o campo "version" deve conter o valor fixo 0x0303 (TLS 1.2), enquanto a versão preferida está contida na extensão "suportada versões ".

Do RFC 8446 (especificação TLS 1.3):

struct {
      ProtocolVersion legacy_version = 0x0303;    /* TLS v1.2 */
      Random random;
      opaque legacy_session_id<0..32>;
      CipherSuite cipher_suites<2..2^16-2>;
      opaque legacy_compression_methods<1..2^8-1>;
      Extension extensions<8..2^16-1>;
  } ClientHello;

legacy_version: nas versões anteriores do TLS, esse campo era usado para negociação de versões e representava o número de versão mais alto suportado pelo cliente. A experiência mostrou que muitos servidores não implementam adequadamente a negociação de versão, levando à "intolerância da versão", na qual o servidor rejeita um ClientHello aceitável com um número de versão maior do que o suportado. No TLS 1.3, o cliente indica suas preferências de versão na extensão "supported_versions" (Seção 4.2.1) e o campo legacy_version DEVE ser definido como 0x0303, que é o número da versão do TLS 1.2. TLS 1. 3 Os ClientHellos são identificados como tendo uma versão herdada de 0x0303 e uma extensão supported_versions presente com 0x0304 como a versão mais alta indicada nela. (Consulte o Apêndice D para obter detalhes sobre compatibilidade com versões anteriores.)

Isso concorda com o que o Wireshark exibe:

Versões suportadas pelo Wireshark

user120513
fonte
11
Bom achado. Parabéns.
Jesse P.
11
Esta foi coberta 4 dias atrás em uma palestra no 35C3: media.ccc.de/v/... A versão "intolerância" problema parece ser bastante difundido em dispositivos "empresa"
cg909
5

Por que o Wireshark mostra na visão geral o Protocolo TLSv1.3, mas nos detalhes da Versão TLS 1.2?

O Wireshark reporta o TLS 1.3 na coluna de protocolo devido ao Server Hello que contém uma extensão de Versões Suportadas com o TLS 1.3.

Lembre-se de que as sessões TLS começam com um handshake para negociar parâmetros como a versão do protocolo e as cifras. O cliente envia uma mensagem de handshake do Client Hello em um registro TLS contendo:

  • Registro TLS - Versão: versão TLS mínima suportada (no TLS 1.2 e anterior). No TLS 1.3, esse campo não é realmente usado e DEVE ser 0x0303 ("TLS 1.2") ou 0x301 ("TLS 1.0") para fins de compatibilidade. Referência: RFC 8446 (página 79)
  • Client Hello - Version: versão máxima suportada do TLS (no TLS 1.2 e anterior). No TLS 1.3, este campo não é usado, mas DEVE ser definido como 0x0303 ("TLS 1.2"). Referência: RFC 8446 (4.1.2. Cliente Hello)
  • Client Hello - Extensão de versões suportadas: lista de versões suportadas. Este é o único valor usado pelas implementações do TLS 1.3 (que podem concordar com o TLS 1.3, 1.2 ou outras versões). Referência: RFC 8446 (4.2.1. Versões suportadas)

O servidor envia uma mensagem de handshake do Server Hello com:

  • Olá Servidor - Versão: versão negociada (para TLS 1.2 e anterior). Se o TLS 1.3 for negociado, DEVE ser definido como 0x0303 ("TLS 1.2").
  • Hello do servidor - versões suportadas: uma única versão negociada (para TLS 1.3). Não pode ser usado para negociar versões anteriores.

Portanto, no TLS 1.2, o cliente envia um intervalo de versões suportadas, enquanto um cliente TLS 1.3 envia uma lista de versões suportadas. O servidor escolherá uma única versão, mas, para fins de compatibilidade, usará um novo campo para selecionar o TLS 1.3 ou mais recente.

(Mesmo que um cliente anuncie o suporte para alguma versão (por exemplo, através de uma versão de registro TLS contendo "TLS 1.0"), ele ainda poderá falhar no handshake, se o servidor concordar com esta versão baixa.)

Outra coisa a ter em atenção: o Wireshark tenta interpretar um pacote imediatamente quando ele é recebido. No momento em que o Client Hello é recebido, ele não conhece a versão final e, portanto, assume a versão de registro TLS. Quando o Server Hello é recebido, ele pode ajustar a versão de acordo:

$ tshark -r test/captures/tls13-rfc8446.pcap 
    1   0.000000     10.9.0.1 → 10.9.0.2     TLSv1 304 Client Hello
    2   0.002634     10.9.0.2 → 10.9.0.1     TLSv1.3 658 Server Hello, Change Cipher Spec, Application Data
    3   0.005266     10.9.0.1 → 10.9.0.2     TLSv1.3 130 Change Cipher Spec, Application Data
    4   0.005772     10.9.0.2 → 10.9.0.1     TLSv1.3 468 Application Data
...

Em uma dissecção de duas passagens (que também inclui a GUI do Wireshark), a versão acordada será conhecida quando imprimir os resultados da segunda passagem:

$ tshark -r test/captures/tls13-rfc8446.pcap -2
    1   0.000000     10.9.0.1 → 10.9.0.2     TLSv1.3 304 Client Hello
    2   0.002634     10.9.0.2 → 10.9.0.1     TLSv1.3 658 Server Hello, Change Cipher Spec, Application Data
    3   0.005266     10.9.0.1 → 10.9.0.2     TLSv1.3 130 Change Cipher Spec, Application Data
    4   0.005772     10.9.0.2 → 10.9.0.1     TLSv1.3 468 Application Data
...

Captura de teste usada acima: https://github.com/wireshark/wireshark/blob/master/test/captures/tls13-rfc8446.pcap

Lekensteyn
fonte