Eu tenho um cliente python. Usando ssl.SSLContext()
( documentação aqui ) e set_ciphers(myciphers)
(onde myciphers é minha lista de ciphersuites que eu mudo com cada handshake, ou seja, com cada conexão de socket). Eu posso controlar a lista de ciphersuites do cliente. O padrão SSLContext
em python desabilita o SSL 2.0 e o SSL 3.0 por padrão e eu não altero as versões no código do meu cliente.
Eu envio 3 handshakes para o website usando uma lista diferente de ciphersuite em cada um. Eu não mudo a versão.
No Wireshark, o ClientHello na coluna "protocolo", vejo versões diferentes? Estou contatando o mesmo site. O cliente não altera a versão.
1) Você pode me explicar por que vejo uma versão diferente do protocolo TLS? 2) Se esta não for a versão real que a oferta do cliente (que deveria ser o TLS 1.2), onde posso obter a versão TLS do cliente real?
Aqui está uma captura de tela para esclarecer (por favor, desculpe sua forma, mas para anonimizar os sites e nomes de PC):
EDITAR: Embora a coluna ClientHello mostre TLSv1, quando clico nele, gravo e vejo a área expandida. Eu vejo isso:
> Secure Socket Layer
> TLSv1.2 Record Layer: Handshake Protocol: Client Hello
Estou confuso. É muito importante para mim garantir que meu cliente sempre tente o TLS 1.2. Deixei o padrão do python, que deve fazer isso de acordo com a documentação.
EDIT 2: Eu vejo o filtro para ver o TLS 1.0 (como mostra a tela, há ClientHellos enviando TLSv1). Mas com esse filtro de exibição:
ssl.handshake.version==0x0301
Nenhuma mensagem ClientHell
o aparece para mim. Apenas alguns ServerHello
. Por favor explique para mim. Isso é um pouco confuso.