HTTP4Component Proxy + SSL external service request error

Speak class, I am using Apache Camel in my project to do an integration. At first it was making a connection with an external service with certificate, working locally, when deploying on the server there was a need to add the ip of the proxy server. With this camel seems that no longer takes the configuration of the certificate, I looked for something for the operation of the two and did not find. I need an aid for the functioning of the two.

Certificate configuration:

    protected void configureSslForHttp4()
    {
        KeyStoreParameters trust_ksp = new KeyStoreParameters();
        trust_ksp.setResource(config.getKeyStore());
        trust_ksp.setPassword(config.getKeyStorePassword());

        KeyManagersParameters kmp = new KeyManagersParameters();
        kmp.setKeyStore(trust_ksp);
        kmp.setKeyPassword(config.getKeyStorePassword());

        SSLContextParameters scp = new SSLContextParameters();
        scp.setKeyManagers(kmp);

        HttpComponent httpComponent = getContext().getComponent("https4", HttpComponent.class);
        httpComponent.setSslContextParameters(scp);

    }

Setting to add proxy:

  • ProxyHost = 172.0.0.1
  • ProxyPort: 8085
getContext().getGlobalOptions().put("http.proxyHost", config.getProxyHost());
getContext().getGlobalOptions().put("http.proxyPort", config.getProxyPort());

When running the log is displayed:

o.a.h.i.c.PoolingHttpClientConnectionManager - Connection released: [id: 20][route: {tls}->https://172.0.0.1:8085->https://servicosexterno.com.br:443][total available: 0; route allocated: 0 of 20; total allocated: 0 of 200]
o.a.c.processor.DefaultErrorHandler - Failed delivery for (MessageId: ID-1771a9a38dc3-1593470960512-0-47 on ExchangeId: ID-1771a9a38dc3-1593470960512-0-46). On delivery attempt: 0 caught: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
o.a.c.processor.DefaultErrorHandler - Failed delivery for (MessageId: ID-1771a9a38dc3-1593470960512-0-47 on ExchangeId: ID-1771a9a38dc3-1593470960512-0-46). Exhausted after delivery attempt: 1 caught: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake


javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:994)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:436)
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:384)
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376)
    at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:401)
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
    at org.apache.camel.component.http4.HttpProducer.executeMethod(HttpProducer.java:334)
    at org.apache.camel.component.http4.HttpProducer.process(HttpProducer.java:193)
    at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148)
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:138)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
    at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:76)
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148)
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:138)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
    at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:715)
    at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:638)
    at org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:248)
    at org.apache.camel.processor.Splitter.process(Splitter.java:129)
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:138)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
    at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:76)
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148)
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
    at org.apache.camel.processor.ChoiceProcessor.process(ChoiceProcessor.java:117)
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
    at org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:197)
    at org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:79)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)
Caused by: java.io.EOFException: SSL peer shut down incorrectly
    at sun.security.ssl.InputRecord.read(InputRecord.java:505)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)
    ... 53 common frames omitted

Author: Allan Moreira, 2020-06-30

1 answers

I found the answer, to be passed the context already configured in http4 must be sent to the proxy as well, as follows:

ProxyAuthScheme (proxy) / Proxy authentication scheme to use. The value can be one of: http, https

Then my link looked like this:

  • https4: / / servicexterno.com.br: 443?proxyAuthScheme=http4

Here is the link from the source where I found the answer.

 0
Author: Allan Moreira, 2020-07-02 15:02:41