Code Review Request, JDK-8207009 SSLEngine#closeInbound mentions SSLException when no close_notify is received

Xuelei Fan xuelei.fan at oracle.com
Tue Aug 7 14:46:28 UTC 2018


New webrev:
http://cr.openjdk.java.net/~xuelei/8207009/webrev.03/

Thanks for a find of Tim Brooks, that the SSLEngine inbound/outbound 
status is incorrect if closing during handshake.  The above webrev is 
trying to fix the problems.  See more in the OpenJDK thread:
http://mail.openjdk.java.net/pipermail/security-dev/2018-August/017778.html

Please let me know your concerns before this Wednesday.

Thanks,
Xuelei

On 8/3/2018 1:55 PM, Xuelei Fan wrote:
> Update: http://cr.openjdk.java.net/~xuelei/8207009/webrev.02/
> 
> In webrev.01, the socket close may be blocked by super class close 
> synchronization.  Updated the SSLSocketImpl.java to use handshake only 
> lock in the startHandshake() implementation.
> 
> Thanks,
> Xuelei
> 
> On 8/1/2018 7:27 PM, Xuelei Fan wrote:
>> Update: http://cr.openjdk.java.net/~xuelei/8207009/webrev.01/
>>
>> Integrated the fix for JDK-8208642, "Server initiated TLSv1.2 
>> renegotiation fails if Java client allows TLSv1.3".  SSLHandshake.java 
>> is updated to use negotiated version so that TLS 1.2 HelloRequest is 
>> acceptable in TLS 1.3 client side.
>>
>> Thanks,
>> Xuelei
>>
>> On 7/30/2018 10:24 AM, Xuelei Fan wrote:
>>> <loop in net-dev as well>
>>> Please let me know your concerns by the end of August 1st, 2018.
>>>
>>> Thanks,
>>> Xuelei
>>>
>>>
>>> On 7/30/2018 9:59 AM, Xuelei Fan wrote:
>>>> Hi,
>>>>
>>>> Please review the update for the TLS 1.3 half-close and 
>>>> synchronization implementation:
>>>>     http://cr.openjdk.java.net/~xuelei/8207009/webrev.00/
>>>>
>>>> Unlike TLS 1.2 and prior versions, for TLS 1.3, the close_notify is 
>>>> use to close the local write side and peer read side only.  After 
>>>> the close_notify get handles, the local read side and peer write 
>>>> side may still be open.
>>>>
>>>> In this update, if an application calls 
>>>> SSLEngine.closeInbound/Outbound() or 
>>>> SSLSocket.shutdownInput/Output(), half-close will be used.  For 
>>>> compatibility, if SSLSocket.close() get called, a duplex close will 
>>>> be tried.  In order to support duplex close, JDK will use the 
>>>> user_canceled warning alert even the handshake complete.
>>>>
>>>> In practice, an application may only close outbound even it is 
>>>> intended to close the inbound as well, or close the connection 
>>>> completely.  It works for TLS 1.2 and prior versions.  But no more 
>>>> for TLS 1.3 because of the close_notify behavior change in the TLS 
>>>> 1.3 specification.  The application may be hung and dead-waiting for 
>>>> read/close.  It could be solved by closing the inbound explicitly. 
>>>> In order to mitigate the impact, a new System Property is 
>>>> introduced, "jdk.tls.acknowledgeCloseNotify" if source code update 
>>>> is not available.   If the System Property is set to "true", if 
>>>> receiving the close_notify, a close_notify alert will be responded.  
>>>> It is a countermeasure of the TLS 1.3 half-close issues.
>>>>
>>>> Thanks,
>>>> Xuelei
>>>>
>>>>
>>>>


More information about the net-dev mailing list