Testing for SSL renegotiation
Someone asked me how to test for SSL connection renegotiation, so I thought I would also write here for the benefit of everyone. Testing is easy provided you have access to an un-patched version of OpenSSL. To test, you will use the s_client tool (you'll type the bits in blue):
$ openssl s_client -connect www.ssllabs.com:443
[snip... a lot of openssl output]
---
HEAD / HTTP/1.0
R
RENEGOTIATING
28874:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:530:
The idea is that you connect to an SSL server and start by typing the first line of a request. You then type a single uppercase letter R on a single line, which tells OpenSSL to ask for renegotiation. I am aware of the following outcomes:
- Your HTTP request completes, which means that renegotiation is enabled
- You get an error (one such possible error is shown in the example above), which means that renegotiation did not work
- The connection blocks and timeouts after a while, which is how OpenSSL 0.9.8l deals with renegotiation.



But isn't one of the proposed fixes, in addition to disabling renegotiation, to cryptographically couple the renegotiated session to the original session? In which case, the above test would result in a false positive?
Posted by: Keith Royster | February 24, 2010 at 03:31 PM