2

Can we control the SSL version for ClientHello (like passing the lesser version then maximum supported)?

I am using Java client to connect to App server. Currently my client is supporting TLSv1.0 and App server is supporting SSLV3, TLSV1.1 and TLSv1.2 but TLSv1.0 has been disabled due to its vulnerability to BEAST attack.

So I wanted to connect to App server via SSLv3 instead of TLSV1.0

Can I achieve the same with Java Client?

1

Yes. At least in Firefox (I'm running 26.0). Open a tab to about:config. Filter for tls.version and set the min/max appropriately. Here's the breakdown of the meaning of the values.

You can also mess with the accepted cipher suites via options (filter about:config for: security.ssl3).

You can test your browser SSL/TLS options by visiting: HowsMySSL.com

Good luck.

(Of course, if, instead, you're looking for a general/OpenSSL answer, the API documentation is your friend. :-D )

1

This question cannot be really answered without knowing what is the involved client software. The client decides what goes into the ClientHello. Some (most) Web browsers can be configured to use or not-use any specific version of SSL/TLS. For instance, with Firefox, you can use the about:config URL to access the internal configuration options, in particular security.tls.version.min and security.tls.version.max.

However, we can still stay that such an alteration cannot be forced from the outside (e.g. some firewall or proxy) because the handshake ends with control messages (called "Finished") whose contents are verified by the peer (the server verifies the contents of the Finished from the client, and vice versa); the contents are actually a hash value computed over the complete contents of all the previous handshake messages. This ensures that the client and server really saw the same messages, down to the last bit. If you alter a ClientHello in transit, then the Finished messages at the end of the connection will not match, and the handshake will not succeed.

(The generic term for forcing a SSL client and server to use a lower version than what they would both like is a version rollback attack; SSL/TLS includes effective protections against that, specifically the contents of the Finished messages.)

  • Hi Tom, I am using Java client to connect to App server. Currently my client is supporting TLSv1.0 and App server is supporting SSLV3, TLSV1.1 and TLSv1.2 but TLSv1.0 has been disabled due to its vulnerability to BEAST attack. So I wanted to connect to App server via SSLv3 instead of TLSV1.0 Can I achieve the same with Java Client. Thanks !! Regards, Ashutosh Kejriwal – Ashutosh Jan 10 '14 at 8:51
  • I am using Java 1.6. There is some constraint with Java 1.7 – Ashutosh Jan 10 '14 at 8:53
  • One may point out that SSL 3.0 is equally vulnerable to BEAST as TLS 1.0, so it makes little sense, on the server, to disable the latter and not the former. – Tom Leek Jan 10 '14 at 12:15
  • In any case, if the server supports SSL 3.0 (but not TLS 1.0) and the client says "up to TLS 1.0" in its ClientHello, then the server should use SSL 3.0. The version specified in the ClientHello is the maximum version supported by the client; it does not mean that the client would refuse any other version. – Tom Leek Jan 10 '14 at 12:16
  • I agree Tom, this issue is specific here. – Ashutosh Jan 10 '14 at 13:01
0

You can use openssl with the s_client option to initiate SSL/TLS connection. Doing so you can influence the protocol used with the appropriate parameters -ssl2 -ssl3 -tls1 -dtls1. You can list the available options like this

 openssl s_client --help
 ...
 -ssl2         - just use SSLv2
 -ssl3         - just use SSLv3
 -tls1         - just use TLSv1
 -dtls1        - just use DTLSv1
 ...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.