我正在使用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
此致 拉温德拉。
答案 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)