Apache http核心nio 4.3.3反向代理SSL错误

时间:2014-12-09 14:03:40

标签: ssl nio reverse-proxy apache-httpcomponents

我正在使用http核心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)     at org.apache.http.nio.pool.AbstractNIOConnPool $ InternalSessionRequestCallback.completed(AbstractNIOConnPool.java:770)     at org.apache.http.impl.nio.reactor.SessionRequestImpl.completed(SessionRequestImpl.java:127)     at 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)     at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor $ Worker.run(AbstractMultiworkerIOReactor.java:586)     在java.lang.Thread.run(Thread.java:662)

我也启用了SSL调试日志,但仍无法找出问题。  然后我调试了这个,发现代理接收到客户端的请求,并由于HttpAsyncRequestConsumer的handle方法中的异常而丢弃。 java.io.IOException例外:不支持SSL

另请注意,SSLContext在使用netty transport编写的反向代理时工作正常。

任何帮助都将不胜感激。

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

此致 拉温德拉。

2 个答案:

答案 0 :(得分:1)

在客户端使用连接池来管理传出连接时,需要确保池用于创建新连接对象的连接工厂具有SSL功能。请确保已正确配置连接池。

答案 1 :(得分:1)

非常感谢您的建议。这解决了这个问题。

        clientSSLContext =
                           SSLUtil.createClientSSLContext(TRUST_STORE_LOCATION,
                                                          TRUST_STORE_PASSWORD);
        BasicNIOConnFactory connectionFactory =
                                                new BasicNIOConnFactory(
                                                                        clientSSLContext,
                                                                        null,
                                                                        ConnectionConfig.DEFAULT);
        proxyConnPool = new ProxyConnPool(connectingIOReactor, connectionFactory, 5000)