Hello,
> I have been using wireshark(0.99.3) to analyse ssl data flows to try to 
> track down an issue where our SSL server(0.9.7d based) somehow gets 
> corrupted and degrades over a period of time to the point where all ssl 
> handshakes result in fatal alerts of "bad record mac".  When analysing a 
> capture taken before the corruption occurs using wireshark it tells me there 
> are a few malformed packets.  One such example is:
> data Packet 1 from client:
> Secure Socket Layer
>     SSLv3 Record Layer: Handshake Protocol: Client Hello
>         Content Type: Handshake (22)
>         Version: SSL 3.0 (0x0300)
>         Length: 97
>         Handshake Protocol: Client Hello
>             Handshake Type: Client Hello (1)
>             Length: 93
>             Version: SSL 3.0 (0x0300)
>             Random.gmt_unix_time: Oct 17, 2006 14:11:14.000000000
>             Random.bytes
>             Session ID Length: 32
>             Session ID (32 bytes)
>             Cipher Suites Length: 22
>             Cipher Suites (11 suites)
>             Compression Methods Length: 1
>             Compression Methods (1 method)
>                 Compression Method: null (0)
> 
> data packet 2, from server:
> Secure Socket Layer
>     SSLv3 Record Layer: Handshake Protocol: Server Hello
>         Content Type: Handshake (22)
>         Version: SSL 3.0 (0x0300)
>         Length: 74
>         Handshake Protocol: Server Hello
>             Handshake Type: Server Hello (2)
>             Length: 70
>             Version: SSL 3.0 (0x0300)
>             Random.gmt_unix_time: Oct 17, 2006 14:10:16.000000000
>             Random.bytes
>             Session ID Length: 32
>             Session ID (32 bytes)
>             Cipher Suite: TLS_RSA_WITH_RC4_128_MD5 (0x0004)
>             Compression Method: null (0)
>     SSLv3 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
>         Content Type: Change Cipher Spec (20)
>         Version: SSL 3.0 (0x0300)
>         Length: 1
>         Change Cipher Spec Message
>     SSLv3 Record Layer: Handshake Protocol: Encrypted Handshake Message
>         Content Type: Handshake (22)
>         Version: SSL 3.0 (0x0300)
>         Length: 56
>         Handshake Protocol: Encrypted Handshake Message:
> 
> data packet 3 from client (malformed):
> Secure Socket Layer
>     SSLv3 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
>         Content Type: Change Cipher Spec (20)
>         Version: SSL 3.0 (0x0300)
>         Length: 1
>         Change Cipher Spec Message
>     SSLv3 Record Layer: Handshake Protocol: Client Hello
>         Content Type: Handshake (22)
>         Version: SSL 3.0 (0x0300)
>         Length: 56
>         Handshake Protocol: Client Hello
>             Handshake Type: Client Hello (1)
>             Length: 4022620
>             Version: Unknown (0xae45)
>             Random.gmt_unix_time: Not representable
>             Random.bytes
>             Session ID Length: 186
In this dump we have situation where client tries to reuse
already negotiated session.
SSL packet flow should be:

CLIENT                      SERVER
ClientHello          ->
                     <-     ServerHello
                     <-     ChangeCipherSpec
                     <-     Finished (encrypted)
ChangeCipherSpec     ->
Finished (encrypted) ->

but client after ChangeCipherSpec sends really malformed
(and out of order) ClientHello.
Length of any SSL handshake packet should be not bigger than
2^14 and session length should be 0-32 bytes.
My proposition is first to disable session caching, for example:

SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF);

and then look if it helps.

Best regards,
-- 
Marek Marcola <[EMAIL PROTECTED]>

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to