Get a Pentest and security assessment of your IT network.

Cyber Security

SSL Client Version Negotiation

TL;DR

Yes, an SSL/TLS client can send a CLIENT HELLO message advertising support for version 3.2 (or higher) without necessarily negotiating down to SSL 3.1. Modern clients typically offer the highest supported protocol versions first and negotiate downwards if the server doesn’t support them.

Solution Guide

  1. Understanding Protocol Negotiation: SSL/TLS negotiation is a process where the client and server agree on the best common security settings. The client proposes its supported protocols, cipher suites, and other options in the CLIENT HELLO message. The server responds with a SERVER HELLO indicating which of those proposals it accepts.
    • SSL 3.1 is considered insecure due to known vulnerabilities (POODLE attack). Clients generally avoid it unless explicitly forced or there’s no better option.
    • TLS 1.0, TLS 1.1 and TLS 1.2 are also deprecated but may be supported for compatibility reasons.
    • TLS 1.3 is the most secure current protocol.
  2. Client Hello Message: The CLIENT HELLO message includes a list of supported SSL/TLS versions. A client can advertise multiple versions, including those higher than 3.1.
    Example Client Hello (simplified):
    Version: TLS 1.3
    Random:
    Cipher Suites: ...
    Compression Methods: ...
  3. Server Response and Negotiation: The server examines the client’s proposals and selects the highest compatible version it supports.
    • If the server only supports TLS 1.2, it will ignore any versions lower than that in the CLIENT HELLO.
    • If the server supports both TLS 1.3 and TLS 1.2, it will typically prefer TLS 1.3.
  4. Checking with Wireshark/tcpdump: You can use network packet analysis tools like Wireshark or tcpdump to inspect the SSL/TLS handshake.
    • Wireshark: Open your capture file and filter for “ssl”. Examine the CLIENT HELLO message to see which versions are advertised. Then check the SERVER HELLO to confirm the negotiated version.
    • tcpdump: Use a filter like tcp port 443 (for HTTPS) or the appropriate port number and then look for the SSL/TLS handshake messages in the output.
  5. Client Configuration: Most clients allow you to configure which SSL/TLS versions are enabled.
    • OpenSSL s_client: Use the -tls1_2 or -tls1_3 options to specify the desired protocol version. For example:
      openssl s_client -connect example.com:443 -tls1_3
    • Web Browsers: Check your browser’s security settings for SSL/TLS configuration options (usually found in advanced settings).
  6. Testing with a Server that Supports Multiple Versions: Set up a test server (e.g., using OpenSSL) that supports TLS 1.2 and TLS 1.3. Then, connect to the server with an SSL client advertising version 3.2 or higher. Verify that the negotiation results in TLS 1.2 or TLS 1.3.
Related posts
Cyber Security

Zip Codes & PII: Are They Personal Data?

Cyber Security

Zero-Day Vulnerabilities: User Defence Guide

Cyber Security

Zero Knowledge Voting with Trusted Server

Cyber Security

ZeroNet: 51% Attack Risks & Mitigation