[
https://issues.apache.org/jira/browse/HTTPCLIENT-2368?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Oleg Kalnichevski resolved HTTPCLIENT-2368.
-------------------------------------------
Resolution: Duplicate
> IllegalStateException: "TLS already activated" with HttpAsyncClient and HTTPS
> Proxy
> -----------------------------------------------------------------------------------
>
> Key: HTTPCLIENT-2368
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2368
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpClient (async)
> Affects Versions: 5.4
> Reporter: Akash
> Priority: Major
>
> *Getting error: java.util.concurrent.ExecutionException:
> java.lang.IllegalStateException: TLS already activated*
>
> Has anyone encountered this issue or knows how to properly handle double TLS
> handshake with HttpAsyncClient when using an HTTPS proxy?
> When HttpAsyncClient is configured to use a proxy, it uses the HTTP CONNECT
> protocol. Here's the flow that leads to this error:
> 1. The client connects over TLS to the proxy
> 2. Client issues an HTTP CONNECT request to the proxy
> 3. Proxy opens a TCP connection to the target URL's host
> 4. If successful, proxy replies with 200 OK
> 5. For HTTPS targets, client attempts another TLS handshake with the target
> host
> 6. This second TLS handshake fails with IllegalStateException because the
> connection already has a TLS context
> Stack Trace:
> {{{*}Caused by: java.util.concurrent.ExecutionException:
> java.lang.IllegalStateException: TLS already activated{*}
> *at org.apache.hc.core5.concurrent.BasicFuture.getResult(BasicFuture.java:84)
> ~[Apache-HttpComponents-HttpCore5-5.0.x.jar:?]*
> *at org.apache.hc.core5.concurrent.BasicFuture.get(BasicFuture.java:122)
> ~[Apache-HttpComponents-HttpCore5-5.0.x.jar:?]*
> *at
> com.amazon.mons.control.http.client.apache.ApacheHttpClient5AsyncBuffered.execute(ApacheHttpClient5AsyncBuffered.java:103)
> ~[main/:?]*
> *... 16 more*
> *Caused by: java.lang.IllegalStateException: TLS already activated*
> *at
> org.apache.hc.core5.reactor.InternalDataChannel.startTls(InternalDataChannel.java:253)
> ~[Apache-HttpComponents-HttpCore5-5.0.x.jar:?]*
> *at
> org.apache.hc.client5.http.impl.nio.DefaultManagedAsyncClientConnection.startTls(DefaultManagedAsyncClientConnection.java:171)
> ~[Apache-HttpComponents-HttpClient5-5.0.x.jar:?]*
> *at
> org.apache.hc.client5.http.ssl.AbstractClientTlsStrategy.upgrade(AbstractClientTlsStrategy.java:127)
> ~[Apache-HttpComponents-HttpClient5-5.0.x.jar:?]*
> *at
> org.apache.hc.client5.http.ssl.DefaultClientTlsStrategy.upgrade(DefaultClientTlsStrategy.java:48)
> ~[Apache-HttpComponents-HttpClient5-5.0.x.jar:?]*
> *at
> org.apache.hc.client5.http.impl.nio.DefaultAsyncClientConnectionOperator.upgrade(DefaultAsyncClientConnectionOperator.java:206)
> ~[Apache-HttpComponents-HttpClient5-5.0.x.jar:?]*
> *at
> org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManager.upgrade(PoolingAsyncClientConnectionManager.java:505)
> ~[Apache-HttpComponents-HttpClient5-5.0.x.jar:?]*
> *at
> org.apache.hc.client5.http.impl.async.InternalHttpAsyncExecRuntime.upgradeTls(InternalHttpAsyncExecRuntime.java:267)
> ~[Apache-HttpComponents-HttpClient5-5.0.x.jar:?]*
> *at
> org.apache.hc.client5.http.impl.async.AsyncConnectExec.doProceedToNextHop(AsyncConnectExec.java:336)
> ~[Apache-HttpComponents-HttpClient5-5.0.x.jar:?]*
> *at
> org.apache.hc.client5.http.impl.async.AsyncConnectExec.proceedToNextHop(AsyncConnectExec.java:195)
> ~[Apache-HttpComponents-HttpClient5-5.0.x.jar:?]*
> *at
> org.apache.hc.client5.http.impl.async.AsyncConnectExec.access$000(AsyncConnectExec.java:90)
> ~[Apache-HttpComponents-HttpClient5-5.0.x.jar:?]*
> *at
> org.apache.hc.client5.http.impl.async.AsyncConnectExec$4.completed(AsyncConnectExec.java:313)
> ~[Apache-HttpComponents-HttpClient5-5.0.x.jar:?]*
> *at
> org.apache.hc.client5.http.impl.async.AsyncConnectExec$6.consumeResponse(AsyncConnectExec.java:468)
> ~[Apache-HttpComponents-HttpClient5-5.0.x.jar:?]*
> *at
> org.apache.hc.core5.http.impl.nio.ClientHttp1StreamHandler.consumeHeader(ClientHttp1StreamHandler.java:252)
> ~[Apache-HttpComponents-HttpCore5-5.0.x.jar:?]*
> *at
> org.apache.hc.core5.http.impl.nio.ClientHttp1StreamDuplexer.consumeHeader(ClientHttp1StreamDuplexer.java:348)
> ~[Apache-HttpComponents-HttpCore5-5.0.x.jar:?]*
> *at
> org.apache.hc.core5.http.impl.nio.ClientHttp1StreamDuplexer.consumeHeader(ClientHttp1StreamDuplexer.java:80)
> ~[Apache-HttpComponents-HttpCore5-5.0.x.jar:?]*
> *at
> org.apache.hc.core5.http.impl.nio.AbstractHttp1StreamDuplexer.onInput(AbstractHttp1StreamDuplexer.java:301)
> ~[Apache-HttpComponents-HttpCore5-5.0.x.jar:?]*
> *at
> org.apache.hc.core5.http.impl.nio.AbstractHttp1IOEventHandler.inputReady(AbstractHttp1IOEventHandler.java:64)
> ~[Apache-HttpComponents-HttpCore5-5.0.x.jar:?]*
> *at
> org.apache.hc.core5.http.impl.nio.ClientHttp1IOEventHandler.inputReady(ClientHttp1IOEventHandler.java:41)
> ~[Apache-HttpComponents-HttpCore5-5.0.x.jar:?]*
> *at
> org.apache.hc.core5.reactor.ssl.SSLIOSession.decryptData(SSLIOSession.java:618)
> ~[Apache-HttpComponents-HttpCore5-5.0.x.jar:?]*
> *at
> org.apache.hc.core5.reactor.ssl.SSLIOSession.access$200(SSLIOSession.java:74)
> ~[Apache-HttpComponents-HttpCore5-5.0.x.jar:?]*
> *at
> org.apache.hc.core5.reactor.ssl.SSLIOSession$1.inputReady(SSLIOSession.java:204)
> ~[Apache-HttpComponents-HttpCore5-5.0.x.jar:?]*
> *at
> org.apache.hc.core5.reactor.InternalDataChannel.onIOEvent(InternalDataChannel.java:143)
> ~[Apache-HttpComponents-HttpCore5-5.0.x.jar:?]*
> *at
> org.apache.hc.core5.reactor.InternalChannel.handleIOEvent(InternalChannel.java:51)
> ~[Apache-HttpComponents-HttpCore5-5.0.x.jar:?]*
> *at
> org.apache.hc.core5.reactor.SingleCoreIOReactor.processEvents(SingleCoreIOReactor.java:176)
> ~[Apache-HttpComponents-HttpCore5-5.0.x.jar:?]*
> *at
> org.apache.hc.core5.reactor.SingleCoreIOReactor.doExecute(SingleCoreIOReactor.java:125)
> ~[Apache-HttpComponents-HttpCore5-5.0.x.jar:?]*
> *at
> org.apache.hc.core5.reactor.AbstractSingleCoreIOReactor.execute(AbstractSingleCoreIOReactor.java:92)
> ~[Apache-HttpComponents-HttpCore5-5.0.x.jar:?]*
> *at org.apache.hc.core5.reactor.IOReactorWorker.run(IOReactorWorker.java:44)
> ~[Apache-HttpComponents-HttpCore5-5.0.x.jar:?]*
> *at java.lang.Thread.run(Thread.java:1583) [?:?]*
> }}
> *Code:*
>
>
>
>
> {noformat}
> HttpRoutePlanner planner = (target, context) → {
> HttpHost httpHost = new HttpHost("https",target.getHostName(), 443);
> HttpHost proxy = new HttpHost("https", proxynode, 443);
> HttpRoute route = new HttpRoute(
> httpHost,
> null,
> proxy,
> true,
> RouteInfo.TunnelType.TUNNELLED,
> RouteInfo.LayerType.LAYERED
> );
> return route;
> };
> CachingHttpAsyncClients.custom()
> //...
> .setRoutePlanner(planner)
> .build();
> future = httpAsyncClient.execute(
> asyncRequestProducer,
> SimpleResponseConsumer.create(),
> null,
> cacheContext,
> null
> );{noformat}
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]