Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
5.2
-
None
Description
Running the following:
try (CloseableHttpAsyncClient httpclient = HttpAsyncClients.customHttp2() .setIOReactorConfig( IOReactorConfig.custom() .setSocksProxyAddress(new InetSocketAddress("127.0.0.1", 9150)) .build()) .build()) { httpclient.start(); final HttpHost target = new HttpHost("https", "nghttp2.org"); final SimpleHttpRequest request = SimpleRequestBuilder.get().setHttpHost(target).setPath("/httpbin/ip").build(); System.out.println("Executing request " + request); final Future<SimpleHttpResponse> future = httpclient.execute( SimpleRequestProducer.create(request), SimpleResponseConsumer.create(), new FutureCallback<SimpleHttpResponse>() { @Override public void completed(final SimpleHttpResponse response) { System.out.println(request + "->" + new StatusLine(response)); System.out.println(response.getBody()); } @Override public void failed(final Exception ex) { System.out.println(request + "->" + ex); } @Override public void cancelled() { System.out.println(request + " cancelled"); } }); future.get(); }
Results in:
Executing request GET https://nghttp2.org/httpbin/ip GET https://nghttp2.org/httpbin/ip->javax.net.ssl.SSLHandshakeException: TLS handshake failed Exception in thread "main" java.util.concurrent.ExecutionException: javax.net.ssl.SSLHandshakeException: TLS handshake failed at org.apache.hc.core5.concurrent.BasicFuture.getResult(BasicFuture.java:72) at org.apache.hc.core5.concurrent.BasicFuture.get(BasicFuture.java:85) at org.apache.hc.client5.http.examples.AsyncH2Socks.main(AsyncH2Socks.java:77) Caused by: javax.net.ssl.SSLHandshakeException: TLS handshake failed at org.apache.hc.core5.reactor.ssl.SSLIOSession.updateEventMask(SSLIOSession.java:454) at org.apache.hc.core5.reactor.ssl.SSLIOSession.setEventMask(SSLIOSession.java:791) at org.apache.hc.core5.reactor.SocksProxyProtocolHandler.inputReady(SocksProxyProtocolHandler.java:242) at org.apache.hc.core5.reactor.ssl.SSLIOSession.decryptData(SSLIOSession.java:624) at org.apache.hc.core5.reactor.ssl.SSLIOSession.access$200(SSLIOSession.java:74) at org.apache.hc.core5.reactor.ssl.SSLIOSession$1.inputReady(SSLIOSession.java:202) at org.apache.hc.core5.reactor.InternalDataChannel.onIOEvent(InternalDataChannel.java:142) at org.apache.hc.core5.reactor.InternalChannel.handleIOEvent(InternalChannel.java:51) at org.apache.hc.core5.reactor.SingleCoreIOReactor.processEvents(SingleCoreIOReactor.java:178) at org.apache.hc.core5.reactor.SingleCoreIOReactor.doExecute(SingleCoreIOReactor.java:127) at org.apache.hc.core5.reactor.AbstractSingleCoreIOReactor.execute(AbstractSingleCoreIOReactor.java:86) at org.apache.hc.core5.reactor.IOReactorWorker.run(IOReactorWorker.java:44) at java.base/java.lang.Thread.run(Thread.java:829)
If the scheme is changed to HTTP it succeeds:
Executing request GET http://nghttp2.org/httpbin/ip GET http://nghttp2.org/httpbin/ip->HTTP/2.0 200 OK SimpleBody{content length=32, content type=application/json}