Apache http core nio 4.3.3 ошибка SSL обратного прокси-сервера

Я разрабатываю обратный прокси-сервер, используя http core nio 4.3.3, и мне нужно подключиться к конечной точке Secure/HTTPS через прокси. Я взял обратный прокси-сервер (асинхронный обратный прокси-сервер HTTP)[1] и добавил поддержку SSL, как показано ниже.

    SSLContext clientSSLContext =
                       SSLUtil.createClientSSLContext(TRUST_STORE_LOCATION,
                                                      TRUST_STORE_PASSWORD);

    final IOEventDispatch connectingEventDispatch =
                                                    new DefaultHttpClientIODispatch(
                                                                                    clientHandler,
                                                                                    clientSSLContext,
                                                                                    ConnectionConfig.DEFAULT);
    ...
    connectingIOReactor.execute(connectingEventDispatch);

Когда я отправляю запрос, я получаю эту ошибку,

java.io.IOException: SSL не поддерживается

Трассировка стека приведена ниже.

[client‹-proxy] 00000001 java.io.IOException: SSL не поддерживается java.io.IOException: SSL не поддерживается в org.apache.http.impl.nio.pool.BasicNIOConnFactory.create(BasicNIOConnFactory.java:159 ) по адресу org.apache.http.impl.nio.pool.BasicNIOConnFactory.create(BasicNIOConnFactory.java:1) по адресу org.apache.http.nio.pool.AbstractNIOConnPool.requestCompleted(AbstractNIOConnPool.java:484) по адресу org.apache. http.nio.pool.AbstractNIOConnPool$InternalSessionRequestCallback.completed(AbstractNIOConnPool.java:770) в org.apache.http.impl.nio.reactor.SessionRequestImpl.completed(SessionRequestImpl.java:127) в org.apache.http.impl. nio.reactor.AbstractIOReactor.processNewChannels(AbstractIOReactor.java:423) в org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:288) в org.apache.http.impl.nio.reactor. BaseIOReactor.execute(BaseIOReactor.java:105) в org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworke rIOReactor.java:586) на java.lang.Thread.run(Thread.java:662)

Я также включил журналы отладки SSL, но все еще не мог понять проблему. Затем я отладил это и обнаружил, что прокси-сервер получил запрос от клиента и падает из-за исключения внутри метода обработки HttpAsyncRequestConsumer. Исключение составляет java.io.IOException: SSL не поддерживается.

Также обратите внимание, что SSLContext отлично работал с обратным прокси-сервером, написанным с использованием транспорта netty.

Любая помощь будет оценена по достоинству.

[1] https://hc.apache.org/httpcomponents-core-ga/examples.html

С уважением, Равиндра.


person Ravindra Ranwala    schedule 09.12.2014    source источник


Ответы (2)


При использовании пула соединений на стороне клиента для управления исходящими соединениями необходимо убедиться, что фабрика соединений, используемая пулом для создания новых объектов соединений, поддерживает SSL. Убедитесь, что пул соединений настроен правильно.

person ok2c    schedule 12.12.2014

Большое спасибо за совет. Это решило проблему.

        clientSSLContext =
                           SSLUtil.createClientSSLContext(TRUST_STORE_LOCATION,
                                                          TRUST_STORE_PASSWORD);
        BasicNIOConnFactory connectionFactory =
                                                new BasicNIOConnFactory(
                                                                        clientSSLContext,
                                                                        null,
                                                                        ConnectionConfig.DEFAULT);
        proxyConnPool = new ProxyConnPool(connectingIOReactor, connectionFactory, 5000)
person Ravindra Ranwala    schedule 13.12.2014
comment
Эй, если бы вы могли поделиться своим полным примером кода, это было бы здорово. Я пытался изменить пример, чтобы использовать SSL, но я не вижу, как ваш код вообще вписывается. Должны быть и другие модификации, нет? В любом случае, если бы вы могли, это было бы здорово. Спасибо. - person ; 28.02.2015