David,
I think we're drifting a little bit from my original question here. I
certainlly don't mean to imply that there's anything wrong with SSL or
the OpenSSL's implementation, I just want to discover if it does what
I want.
TCP specifically does *not* communicate ACKs up to the application
because
these ACKs do *not* indicate that higher levels on the other end have
received the data.
Certainly! I never said it did. TCP ensures delivery to the host, not
the application. But it does ensure it up to the host, or if that cant
be achieved the peer host is appropriately notified.
My problem is that a a TCP hijack might prevent this notification
without *any* host ever being alerted. Incidentally, the system I'm
working on does a similar kind of hijacking, although for "enrichment"
purposes, not attacks.
In particular the problem I presented is connected with an
implementation of a distributed licensed feature control system, where
both server and client application are controlled by me.
In *my* problem, I can assume the client application will never crash
and I don't care if it processed the data correctly. I just need to
know that no client silently blocked the message that my server sent
and noone ever noticed.
Without SSL, the solution would then be to implement application-level
acknowledges, sequence numbering, and digests of message contents
concatenated with a private key to avoid blocking, replay and forgery
attacks, respectively.
But apparently the SSL protocol does a lot of this!
Since what I've read from the RFC, SSL is just an application running
on top of TCP transport, if there is such a thing as SSL acknowledges,
also encrypted with a secret key agreed on during handshake, the
client cannot forge these (easily). In that case, in my
application_level2 on top of SSL, I don't need to implement
acknowledge messages.
In that case I could just write to the SSL socket and, if I get no
errors, be sure the data arrived at the other side.
J