>Sent: Monday, 10 September, 2012 08:17
> 2. If it's a handshake failure, can you use commandline
> s_client? That has logging builtin, use -msg and/or -debug .
>Mithun>>Last time i used i got the below
>...openssl s_client -connect NC-WIN2008X64:1433 -state -debug -msg -ssl3
<snip>
>SSL_connect:SSLv3 write client hello A
>read from 08A018A8 [08A06E50] (5 bytes => 0 (0x0))
>SSL_connect:failed in SSLv3 read server hello A
>12542:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake
failure:s3_pkt.c:529:
>I see your reply
> Read count 0 nominally means the server closed the TCP connection,
> neither continuing the handshake (with ServerHello)nor cleanly aborting
> (with alert). A compliant server shouldn't do this, but some do,
especially
> if it judges you shouldn't be allowed to connect e.g. blacklisted IPaddr,
> too many attempts too fast, etc. Ask the server operator(s) why it
> didn't/doesn't like you.
> Alternatively, there is a remote possibility some middlebox in your
> network path such as a firewall is doing the close. However middleboxes
> usually do this earlier: on the TCP connection (SYN) not during SSL
> handshake, which is "just" data to the TCP/IP level.
>Any work around that you suggest ?
I didn't notice before, but 1433 on Windows is usually SQLServer.
If so, SQLServer doesn't start in SSL; it starts in a SQLServer protocol
(TDS) and optionally switches to SSL. If you connect to 1433 and just start
an SSL handshake, SQLServer will consider this a violation of TDS protocol.
This falls under the case in my prior reply "make sure the server is doing
SSL". And in fact on my elderly SQLServer2005 Express, connecting to 1433
and starting -ssl3 handshake does exactly as you report, with an event
logged:
source=MSSQLSERVER eventid=17836
Length specified in network packet payload did not match number of bytes
read;
the connection has been closed. Please contact the vendor of the client
library.
[CLIENT: 127.0.0.1]
whereas a (default) ssl2 clienthello hangs (at least 1minute).
Looking briefly at a trace of a clear TDS connection, it appears that
bytes 2 and 3 are (bigendian inclusive) length, and in ssl3 clienthello
these are 00 00 which is clearly invalid, whereas in ssl2 clienthello
they are 01 00 which is longer than the message actually sent, thus
the server is likely waiting for the rest of the supposed TDS message.
In this case, you must implement the TDS protocol, or at least the part
of it that starts SSL. (And once you get SSL, you still need to implement
the TDS protocol if you want to use the connection for anything.)
I haven't found protocol doc or sourcecode available from Microsoft
(which doesn't prove it isn't there somewhere I don't know about).
freetds.sourceforge.net claims to be an opensource driver
implementation, using either gnutls or openssl; I haven't tried it,
but it might work for you, or looking at the source might help.
jtds.sourceforge.net is a Java port of freetds that I do use okay,
and Java's SSL implementation (JSSE) has the feature that (fairly
verbose) logging can be turned on by a sysprop without code change:
http://docs.oracle.com/javase/6/docs/technotes/guides/security/jsse/JSSERefG
uide.html#Debug
If 1433 is not SQLServer, I'm back to: find out what it dislikes.