Hi Tony,

I agree with you, TLS should not have requirements on the underlying transport.
If there is a use case that would require endpoints have a way to signal to the 
peer that they're done reading, I would suggest writing a draft about a new 
close_request alert.
I personally don't think this needs to be in the main TLS 1.3 spec, though.

Thanks,
David


> On Mar 8, 2018, at 02:23, Tony Putman <tony.put...@dyson.com> wrote:
> 
> David,
>  
> I think this is a valid concern. It's been commented on 
> (https://www.ietf.org/mail-archive/web/tls/current/msg25579.html 
> <https://www.ietf.org/mail-archive/web/tls/current/msg25579.html>) that the 
> draft has NO requirements on the underlying transport. There are potentially 
> other transports for TLS (such as being worked by the ATLAS WG) which may not 
> have a way to terminate the transport.
>  
> At a minimum this must be addressed in DTLS, but it seems to me that the 
> addition of a close_request alert is a small matter which would benefit both 
> protocols. Of course, this could be added at a later date if/when the need 
> arises.
>  
> Regards,
> Tony
>  
> From: TLS [mailto:tls-boun...@ietf.org] On Behalf Of Xuelei Fan
> Sent: 07 March 2018 20:54
> To: David Schinazi
> Cc: tls@ietf.org
> Subject: Re: [TLS] TLS 1.3, how to close the read side of a connection?
>  
> Hi David,
>  
> The case I can think of now is the START TLS protocols (Opportunistic TLS).  
> But looks like these protocols need to use an existing plain-text socket, and 
> then establish a TLS connection over it, and will never go back to plain-text 
> again.  Maybe, for START TLS protocols, closing TLS connection just implies 
> close the underlying TCP socket in practice.  We don't do that previously as 
> we don't know how the  plain-text socket can be used in practice in the 
> follow on processes after TLS get closed (while socket still alive).   If an 
> application gets indication that the TLS connection get closed, it can use 
> the cleanup socket.  So it does not actually need to understand the TLS 
> specifics.
>  
> I'm a little bit hesitate if there is a reality user case for such 
> requirement.  Maybe, I can just close the socket, and see what the 
> compatibility impact could be.
>  
> Thanks,
> Xuelei
>  
> On Wed, Mar 7, 2018 at 12:21 PM, David Schinazi <dschin...@apple.com 
> <mailto:dschin...@apple.com>> wrote:
> Hi Xuelei,
>  
> Can you elaborate on what proxy protocol you're using that can reuse the TCP 
> connection for follow on connections, and what semantics it has?
> As far as I know, SOCKS and HTTP CONNECT don't support this.
> Additionally, the close_notify alerts are sent encrypted so the proxy 
> wouldn't be able to tell that applications are done with TLS.
>  
> Thanks,
> David
>  
> 
> 
> On Mar 7, 2018, at 11:24, Xuelei Fan <xuelei....@vimous.com 
> <mailto:xuelei....@vimous.com>> wrote:
>  
> Hi David,
>  
> This issue happens when the TLS connection is established/layered on an 
> existing TCP connection.  For example:
> 1. A client connects to a proxy
> 2. The client establishes a TLS 1.3 connection to a server via the proxy.
> 3. The  server delivers 2+ records  to the client.
> 4. The client receives the 1st record, and intends to close the TLS connection
>  
> As the  existing TCP connection may be used for follow on connections, it 
> might not be a solution to close the TCP connection directly.  And the client 
> would better cleanup the data delivered by the server.   Otherwise, the data 
> may be used by the next follow on connection and may cause unknown issues.
>  
> Then the question comes to me: how does the client close the TLS connection? 
> Closing the TCP connection may be not desired as it does not really have a 
> TCP connection to the server.  It would be nice to close the TLS connection 
> but keeping the TCP connection alive.
>  
> Looks like there is no way to close the read side of a TLS connection in TLS 
> layer per the current TLS 1.3 specification.  The close_notify is used to 
> indicate the closure of client write side, but not the server write side.  If 
> the client sends the close_notify for read side closure, after receiving the 
> close_notify the server side will not receive data, but may still send data.  
> Even if the server side stop sending data, the client side does not actually 
> know how may data has been delivered by the server, and how to clean up the 
> TLS channel.
>  
> For such cases in TLS 1.2, the client can send a  close_notify alert and then 
> wait for the server close_notify alert, and all of the intermediate data is 
> discarded.  There are still some problems, but in theory the client can 
> cleanup the TCP channel.
>  
> In the TLS 1.3 specification, it says:
>    
>    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 a "close_notify" alert
>    before indicating end-of-data to the application-layer.
>  
> For client read side in above case, it means that the server side MUST 
> deliver a close_notify.  But it does not say if a client initiates the TLS 
> closure, how could the client indicates the server for a close_notify alert.
>  
> Thanks for the suggestion of TCP RST option.  I will evaluate if TCP options 
> can help.
>  
> Thanks & Regards,
> Xuelei Fan
>  
>  
> On Wed, Mar 7, 2018 at 10:19 AM, David Schinazi <dschin...@apple.com 
> <mailto:dschin...@apple.com>> wrote:
> Hi Xuelei,
>  
> Do you have an example for when you would need to gracefully close the read 
> side?
> If you're downloading a 10GB video and the user cancels the download, you can 
> simply tear down the TCP connection by sending a RST.
> The benefit of having a graceful read close would be for the server to know 
> that the client application was done, but in the 10GB video example,
> I don't see what the server application would do with that information. Do 
> you have an example where the server would treat a graceful read close
> differently from a non-graceful close? In TLS 1.2 and prior, the client would 
> send a close_notify, the server would reply with a close_notify
> in the middle of the 10GB of application data. That actually doesn't provide 
> any gracefulness to the server application - the point of close_notify
> is to indicate that the data you're sending hasn't been truncated, and in 
> this example it does get truncated.
>  
> Thanks,
> David Schinazi
>  
> 
> 
> On Mar 7, 2018, at 09:51, Eric Rescorla <e...@rtfm.com 
> <mailto:e...@rtfm.com>> wrote:
>  
> Well, this is like TCP in that respect. You send close_notify and then you 
> either stop reading off of or close the TCP socket.
>  
> -Ekr
>  
>  
> On Wed, Mar 7, 2018 at 9:40 AM, Xuelei Fan <xuelei....@vimous.com 
> <mailto:xuelei....@vimous.com>> wrote:
> Hi,
>  
> Per TLS 1.3 draft (Section 6.1, Closure Alerts), the close_notify alert is 
> used to notify the recipient that the sender will not send any more messages 
> on this connection.  And this does not have any effect on its read side of 
> the connection.  I think it means that after sending the close_notify alert, 
> it still can keep reading data from the peer; and after receiving the 
> close_notify alert, it still can keep sending data to the peer.
>  
> The question comes to me is about how to close the read side of the 
> connection.  If closing the read side silently, there are potential issues if 
> the application protocol using TLS provides that any data may be carried over 
> the underlying transport after the TLS connection is closed.  If sending a 
> close_notify alert, the peer may just treat is as close the its read side and 
> may keep write in its write side.  It does not actually close the read side 
> cleanly.  If keep waiting for the close_notify from the peer, the local may 
> have to wait until the peer happy to close its write side.  It does not sound 
> friendly to the local side.   From example, if I download a 10GB video via 
> TLS 1.3 over VPN, looks like there is no way to indicate the server that I 
> want to cancle in the middle of the downloading in TLS layer.  I may miss 
> something.  I did not find a solution about how to close the read side of TLS 
> 1.3 connections yet.  Please help if you have an idea!
>  
> It's not a problem in TLS 1.2 and prior versions, as the peer MUST respond 
> with a close_notify of its own after receiving a close_notify alert.
>  
> Thanks,
> Xuelei Fan
> 
> _______________________________________________
> TLS mailing list
> TLS@ietf.org <mailto:TLS@ietf.org>
> https://www.ietf.org/mailman/listinfo/tls 
> <https://www.ietf.org/mailman/listinfo/tls>
>  
> _______________________________________________
> TLS mailing list
> TLS@ietf.org <mailto:TLS@ietf.org>
> https://www.ietf.org/mailman/listinfo/tls 
> <https://www.ietf.org/mailman/listinfo/tls>
>  
>  
>  
>  
> 
> Dyson Technology Limited, company number 01959090, Tetbury Hill, Malmesbury, 
> SN16 0RP, UK. 
> This message is intended solely for the addressee and may contain 
> confidential information. If you have received this message in error, please 
> immediately and permanently delete it, and do not use, copy or disclose the 
> information contained in this message or in any attachment. 
> Dyson may monitor email traffic data and content for security & training.

_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to