[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-2328?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17850172#comment-17850172
 ] 

Zoe Wang commented on HTTPCLIENT-2328:
--------------------------------------

The root cause seems to be that the client is not able to handle half-closed 
connection (outbound closed) properly, and not that it can't efficiently 
perform socket read and write at the same time because as shown in the SSL logs 
provided above, the client did receive close_notify from the server.

The issue with `jdk.tls.acknowledgeCloseNotify` is that it's a global setting 
and it may cause issues for other applications in the same JVM relying on the 
half-closed connection. I understand if there is nothing you can do on the 
Apache HTTP client side and I just wanted to check if you can think of other 
workaround. If not, feel free to resolve the issue.

> 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: 4.5.14, 5.3.1
>            Reporter: Zoe Wang
>            Priority: Major
>         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