Zoe Wang created HTTPCLIENT-2328:
------------------------------------

             Summary: Request hangs if TLS 1.3 connection is half-closed 
                 Key: HTTPCLIENT-2328
                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2328
             Project: HttpComponents HttpClient
          Issue Type: Bug
          Components: HttpClient (classic)
    Affects Versions: 5.3.1, 4.5.14
            Reporter: Zoe Wang
         Attachments: HalfCloseApache5Client.Java, HalfCloseServer.java, 
TlsHalfCloseApache4.java, keystore.jks

If a server with TLS 1.3 support closes the connection during the request, more 
specifically, sending close_notify while the client is still writing to socket, 
 the request will hang indefinitely. It's not an issue with TLS 1.2 because it 
uses duplex-close policy. With TLS 1.3's half-closed connection policy, it 
seems Apache HTTP client is not able to detect connection closure properly. We 
are able to reproduce the issue with both 4.x and 5.x. I should note that HTTP 
URL connection does not have this issue.

The workaround it to set `jdk.tls.acknowledgeCloseNotify` to true (see 
https://bugs.openjdk.org/browse/JDK-8208526), but that would require a lot of 
users to make changes on their side. 

 

Steps to repro:
 * Download the attached keystore file
 * Update ksPath in the server code HalfCloseServer.java to where you download 
the keystore
 * Run the server, the server will begin listening on {{localhost:8081}}
 * Create a random file of size 128MB and update client code `testFile` to 
where the file is.
 * Run the client, it should hang
 * If System.setProperty("jdk.tls.acknowledgeCloseNotify", "true") is 
uncommented, it will not hang
 * It also won’t hang if we we force TLS1.2

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org
For additional commands, e-mail: dev-h...@hc.apache.org

Reply via email to