[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-2165?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jan Peter Stotz updated HTTPCLIENT-2165:
----------------------------------------
    Comment: was deleted

(was: As the whole state system seems to be irrelevant form my use case I found 
a work-around:

I override {{PoolingHttpClientConnectionManager.releaseConnection and kill the 
state (set state = null) before returning the connection to the pool. Then the 
next call to leaseConnection is able to retrieve that connection and reuse it. 
I know this is not a nice workaround but at least it is effective and in my 
scenario I am not aware of other negative consequences.}}

 
{code:java}
connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry) 
{@Override
public void releaseConnection(HttpClientConnection managedConn, Object state, 
long keepalive, TimeUnit tunit) {
 state = null;
 super.releaseConnection(managedConn, state, keepalive, tunit);
}{code})

> TCP connections are never reused when server requires TLS cert auth
> -------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-2165
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2165
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient (classic)
>    Affects Versions: 4.5.13
>         Environment: Windows, OpenJDK 11
>            Reporter: Jan Peter Stotz
>            Priority: Major
>         Attachments: hc5_testcode.txt
>
>
> While performing test with an non-public web server serving a REST service I 
> noticed that Apapche commons httpclient does not reuse connections in case 
> the server requires HTTPS authentication via client certificate. 
> This is my code for initializing the ConnectionManager. The used sslContext 
> is created using the appropriate trust- and keyStore and 
> X509ExtendedKeyManager implementation.
> {{SSLConnectionSocketFactory factory = new 
> SSLConnectionSocketFactory(sslContext, hostNameVerifier);}}
> {{Registry<ConnectionSocketFactory> socketFactoryRegistry = 
> RegistryBuilder.<ConnectionSocketFactory> create().register("https", 
> factory).build();}}
> {{connManager = new 
> PoolingHttpClientConnectionManager(socketFactoryRegistry);}}
> {{connManager.setMaxTotal(1000);}}
> {{connManager.setDefaultMaxPerRoute(200);}}
> {{connManager.setValidateAfterInactivity(20000);}}{{SocketConfig socketConfig 
> = SocketConfig.custom().setTcpNoDelay(true).setSoKeepAlive(true).build();}}
> {{connManager.setDefaultSocketConfig(socketConfig);}}
>  
> {{The used server is an Undertow instance configured to require SSL client 
> authentication: setSocketOption(Options.SSL_CLIENT_AUTH_MODE, 
> SslClientAuthMode.REQUIRED)}}
>  
> {{If I disable the client auth mode requirement httpclient just opens up one 
> TCP connection to the server. If I enable https client authentication 
> httpclient opens up to the configured route maximum (200) TCP connections to 
> the server. I observed the same behavior using a different web server 
> implementation.}}
> {{Enabling logging for PoolingHttpClientConnectionManager I can see that 
> httpclient is using the full maximum of 200 connections per route if HTTPS 
> client auth is required by the server (log after making ~1000 HTTP 
> requests):}}
>  
> {{No HTTPS client auth required by server:}}
> {{DEBUG o.a.h.i.c.PoolingHttpClientConnectionManager - Connection request: 
> [route: \{s}->https://localhost:9003][total available: 1; route allocated: 1 
> of 200; total allocated: 1 of 1000]}}
>  
> {{HTTPS Client auth required by server:}}
>  {{DEBUG o.a.h.i.c.PoolingHttpClientConnectionManager - Connection request: 
> [route: \{s}->https://localhost:9003][total available: 200; route allocated: 
> 200 of 200; total allocated: 200 of 1000]}}
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to