我正在使用http core nio 4.3.3开发反向代理,需要通过代理连接到Secure / HTTPS endpoints . 我采用了反向代理(异步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 not supported
堆栈跟踪如下 .
[client<-proxy] 00000001 java.io.IOException: SSL not supported java.io.IOException: SSL not supported at org.apache.http.impl.nio.pool.BasicNIOConnFactory.create(BasicNIOConnFactory.java:159) at org.apache.http.impl.nio.pool.BasicNIOConnFactory.create(BasicNIOConnFactory.java:1) at 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) at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:288) at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:105) at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:586) at java.lang.Thread.run(Thread.java:662)
我也启用了SSL调试日志,但仍无法解决问题 . 然后我调试了这个,发现代理接收到客户端的请求,并由于HttpAsyncRequestConsumer的handle方法中的异常而丢弃 . java.io.IOException例外:不支持SSL
另请注意,SSLContext在使用netty传输编写的反向代理时工作正常 .
任何帮助,将不胜感激 .
[1] https://hc.apache.org/httpcomponents-core-ga/examples.html
此致,拉文德拉 .
2 回答
在客户端使用连接池来管理传出连接时,需要确保池用于创建新连接对象的连接工厂具有SSL功能 . 请确保已正确配置连接池 .
非常感谢您的建议 . 这解决了这个问题 .