I have a python client. Using
ssl.SSLContext() (documentation here) and
set_ciphers(myciphers) (where myciphers is my list of ciphersuites that I change with every handshake, i.e., with every socket connection). I can control the list of the client ciphersuites. The default
SSLContext in python disable SSL 2.0 and SSL 3.0 by default and I do not any change to the versions in my client's code.
I send 3 handshakes to the website using different ciphersuite list in each one. I do not change the version.
In Wireshark, the ClientHello in the "protocol" column, I see different versions? I am contacting the same site. The client does not change the version.
1) Can you please explain to me why I see different TLS protocol version? 2) If this is not the actual version the client offer (which should be TLS 1.2), where can I get the actual client offered TLS version?
EDIT: Although the ClientHello column shows TLSv1, when I click ont he record and see the expanded area. I see this:
> Secure Socket Layer > TLSv1.2 Record Layer: Handshake Protocol: Client Hello
I am confused. It is very important to me to ensure that my client always tries TLS 1.2. I left the python's default which should do this according to their documentation.
EDIT 2: I do view filter to see TLS 1.0 (as the screen show, there ClientHellos sending TLSv1). But with this view filter:
ClientHello messages appear to me. Only some
ServerHello. Please, explain to me. This is rather confusing.