Hi.

This is something that I’m also interested, as a contributor to Libevent, which 
provides SSL-socket support.

I’ve opened an OpenSSL issue:

https://github.com/openssl/openssl/issues/6911 
<https://github.com/openssl/openssl/issues/6911>

to collect the details on how a graceful shutdown can be implemented in 
Libevent.

Thanks,

-Philip


> On Aug 1, 2018, at 1:46 PM, Alex H <alexhult...@gmail.com> wrote:
> 
> [...] The other party MUST respond with a close_notify alert of its own and 
> close down the connection immediately, discarding any pending writes.
> 
> I've read this before, but I've also checked the sources of SSL_write and 
> they seem contradictory:
> 
> SSL_write does not return with error when SSL_RECEIVED_SHUTDOWN is set, but 
> does so when SSL_SENT_SHUTDOWN is set. Why is this? A minor bug? If the RFC 
> states the end who receives a close_notify should discard any pending writes 
> then it surely seems a bug to allow SSL_write for a connection where 
> SSL_RECEIVED_SHUTDOWN is set?
> 
> ....
> 
> > If your question is whether you can still read any data that may have
> been in flight when you send your close_notify, I believe the answer
> is no.  Further data received from the peer is discarded after a
> close_notify is sent.
> 
> I also believe so, especially since SSL_shutdown docs seem to hint that once 
> SSL_shutdown is called, it should be called again until fully done (serving 
> SSL_WANT_READ/WRITE as needed). In other words, SSL_shutdown becomes the only 
> function called until the SSL connection is fully closed, no more SSL_read is 
> called and thus it cannot report any received data. SSL_shutdown does not 
> return with any data.
> 
> Regarding the SSL_RECEIVED_SHUTDOWN - do you think this is a minor bug?
> 
> Den ons 1 aug. 2018 kl 21:16 skrev Viktor Dukhovni 
> <openssl-us...@dukhovni.org <mailto:openssl-us...@dukhovni.org>>:
> 
> 
> > On Aug 1, 2018, at 2:27 AM, Alex H <alexhult...@gmail.com 
> > <mailto:alexhult...@gmail.com>> wrote:
> > 
> > Is it possible to receive data after calling SSL_shutdown? Reading the 
> > specs and docs leaves this rather blurry.
> 
> TLS *does not* support half-closed connections (RFC5246):
> 
>    close_notify
>       This message notifies the recipient that the sender will not send
>       any more messages on this connection.  Note that as of TLS 1.1,
>       failure to properly close a connection no longer requires that a
>       session not be resumed.  This is a change from TLS 1.0 to conform
>       with widespread implementation practice.
> 
>    Either party may initiate a close by sending a close_notify alert.
>    Any data received after a closure alert is ignored.
> 
>    Unless some other fatal alert has been transmitted, each party is
>    required to send a close_notify alert before closing the write side
>    of the connection.  The other party MUST respond with a close_notify
>    alert of its own and close down the connection immediately,
>    discarding any pending writes.  It is not required for the initiator
>    of the close to wait for the responding close_notify alert before
>    closing the read side of the connection.
> 
>    If the application protocol using TLS provides that any data may be
>    carried over the underlying transport after the TLS connection is
>    closed, the TLS implementation must receive the responding
>    close_notify alert before indicating to the application layer that
>    the TLS connection has ended.  If the application protocol will not
>    transfer any additional data, but will only close the underlying
>    transport connection, then the implementation MAY choose to close the
>    transport without waiting for the responding close_notify.  No part
>    of this standard should be taken to dictate the manner in which a
>    usage profile for TLS manages its data transport, including when
>    connections are opened or closed.
> 
>    Note: It is assumed that closing a connection reliably delivers
>    pending data before destroying the transport.
> 
> If your question is whether you can still read any data that may have
> been in flight when you send your close_notify, I believe the answer
> is no.  Further data received from the peer is discarded after a
> close_notify is sent.
> 
> -- 
>         Viktor.
> 
> -- 
> openssl-users mailing list
> To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users 
> <https://mta.openssl.org/mailman/listinfo/openssl-users>
> -- 
> openssl-users mailing list
> To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users

-- 
openssl-users mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users

Reply via email to