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


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


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.