Conscrypt con jdk8 para habilitar ALPN para http2

He estado buscando cómo implementar Conscrypt Proveedor SSL usando conscrypt-openjdk-uber-1.4.1.jar para que jdk8 admita ALPN para hacer un http2 (usando apache httpclient 5) conexión a un servidor como jdk8 no admite ALPN por defecto o la otra solución es migrar a jdk9 (o superior) que no es factible por ahora ya que nuestro producto esdepende mucho de jdk8

He estado buscando ampliamente algunos documentos o ejemplos para implementar, pero no pude encontrar uno.

He intentado insertar el proveedor de conscrypt como predeterminado y mi programa lo toma como proveedor predeterminado, pero aún así no se conecta con el servidor http2, mi ejemplo es el siguiente,

public static void main(final String[] args) throws Exception {
    Security.insertProviderAt(new OpenSSLProvider(), 1);
    final SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(new TrustAllStrategy()).build();
    final PoolingAsyncClientConnectionManager connectionManager = PoolingAsyncClientConnectionManagerBuilder.create().setTlsStrategy(new H2TlsStrategy(sslContext, NoopHostnameVerifier.INSTANCE)).build();
    final IOReactorConfig ioReactorConfig = IOReactorConfig.custom().setSoTimeout(Timeout.ofSeconds(5)).build();
    final MinimalHttpAsyncClient client = HttpAsyncClients.createMinimal(HttpVersionPolicy.FORCE_HTTP_2, H2Config.DEFAULT, null, ioReactorConfig, connectionManager);

    client.start();
    final HttpHost target = new HttpHost("localhost", 8082, "https");
    final Future<AsyncClientEndpoint> leaseFuture = client.lease(target, null);
    final AsyncClientEndpoint endpoint = leaseFuture.get(10, TimeUnit.SECONDS);
    try {
        String[] requestUris = new String[] {"/"};
        CountDownLatch latch = new CountDownLatch(requestUris.length);
        for (final String requestUri: requestUris) {
            SimpleHttpRequest request = SimpleHttpRequest.get(target, requestUri);
            endpoint.execute(SimpleRequestProducer.create(request), SimpleResponseConsumer.create(), new FutureCallback<SimpleHttpResponse>() {
                        @Override
                        public void completed(final SimpleHttpResponse response) {
                            latch.countDown();
                            System.out.println(requestUri + "->" + response.getCode());
                            System.out.println(response.getBody());
                        }

                        @Override
                        public void failed(final Exception ex) {
                            latch.countDown();
                            System.out.println(requestUri + "->" + ex);
                            ex.printStackTrace();
                        }

                        @Override
                        public void cancelled() {
                            latch.countDown();
                            System.out.println(requestUri + " cancelled");
                        }

                    });
        }
        latch.await();
    } catch (Exception e) {
        e.printStackTrace();
    }finally {
        endpoint.releaseAndReuse();
    }

    client.shutdown(ShutdownType.GRACEFUL);
}

este programa da la salida como

org.apache.hc.core5.http.ConnectionClosedException: conexión cerrada org.apache.hc.core5.http.ConnectionClosedException: conexión cerrada en org.apache.hc.core5.http2.impl.nio.FrameInputBuffer.read (FrameInputBuffer. java: 146) en org. java: 63) en org.apache.hc.core5.http2.impl.nio.ClientHttp2IOEventHandler.inputReady (ClientHttp2IOEventHandler.java:38) en org.apache.hc.core5.reactor.InternalDataChannel.onIOEnel (InternalDataC.DavaChannel en org.apache.hc.core5.reactor.InternalChannel.handleIOEvent (InternalChannel.java:50) en org.apache.hc.core5.reactor.SingleCoreIOReactor.processEvents (SingleCoreIOReactor.java:173) en org.apache.hc.core5 .reactor.SingleCoreIOReactor.doExecute (SingleCoreIOReactor.java:123) en org.apache.hc.core5.reactor.AbstractSingleCoreIOReactor.execute ( AbstractSingleCoreIOReactor.java:80) en org.apache.hc.core5.reactor.IOReactorWorker.run (IOReactorWorker.java:44) en java.lang.Thread.run (Thread.java:748)

Si imprimo el proveedor y la versión, se imprime comoConscrypt versión 1.0 yJDK 1.8.0_162, pero aún no se conecta con un punto final http2

el mismo fragmento de código funciona perfectamente si me conecto usando jdk9 con el proveedor predeterminado, ¿qué me falta aquí en la configuración de conscrypt?

Cualquier ayuda es apreciada

Gracias por adelantad

Respuestas a la pregunta(1)

Su respuesta a la pregunta