带有Java客户端问题的SSL和Http代理 - ConnectionClosedException

时间:2013-08-02 16:18:26

标签: java http ssl proxy squid

我们使用支持java http客户端的http代理服务器,每秒执行数百次SSL请求。客户端是netty提供的AsyncHttpClient,使用NIO(com.ning:async-http-client:1.7.19)。代理服务器正在使用Squid 3.3。

当我们将客户端配置为'allowSslConnectionPool'时,我们经常在NettyAsyncHttpProvider中看到java.nio.channels.ClosedChannelException(我们尝试过Grizzly,它出现了类似的问题)。当我们禁用ssl连接池时,一切正常。相反,启用池并且没有代理服务器,事情再次正常工作。显然,没有池连接的问题是我们为每个请求创建新的SSL连接,严重影响我们的服务器。

在客户端本地汇集SSL连接并使用HTTPS代理是否存在一些基本问题?似乎应该有一些设置可以让它在Squid或客户端本身工作,但我们现在处于亏损状态。

客户端配置

new AsyncHttpClientConfig.Builder().setMaximumConnectionsTotal(maxconns.get())
    .setMaximumConnectionsPerHost(consPerHost.get())
    .setUserAgent(userAgent.get())
    .setConnectionTimeoutInMs(MAX_CONN_TIME_MS)
    .setRequestTimeoutInMs(MAX_RESP_TIME_MS)
    .setFollowRedirects(true)
    .setAllowSslConnectionPool(true)
    .setProxyServer(new ProxyServer(ProxyServer.Protocol.HTTPS, "xxx", 3128, "yyy", "zzz")
    )

我们得到的例外是

2013-08-02 09:33:33,342 DEBUG (New I/O worker #16 ) com.ning.http.client.providers.netty.NettyAsyncHttpProvider: Unexpected I/O exception on channel [id: 0xd9cce308, xxx => yyy]
2013-08-02 09:33:33,343 DEBUG (New I/O worker #16 ) com.ning.http.client.providers.netty.NettyAsyncHttpProvider:
java.nio.channels.ClosedChannelException
    at org.jboss.netty.handler.ssl.SslHandler$6.run(SslHandler.java:1580)
    at org.jboss.netty.channel.socket.ChannelRunnableWrapper.run(ChannelRunnableWrapper.java:40)
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.executeInIoThread(AbstractNioWorker.java:71)
    at org.jboss.netty.channel.socket.nio.NioWorker.executeInIoThread(NioWorker.java:36)
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.executeInIoThread(AbstractNioWorker.java:57)
    at org.jboss.netty.channel.socket.nio.NioWorker.executeInIoThread(NioWorker.java:36)

相关的Squid配置(我们尝试过使用和不使用ssl-bump)

http_port 3128 ssl-bump cert=/etc/squid3/server.crt key=/etc/squid3/server.key
always_direct allow all
ssl_bump allow all

0 个答案:

没有答案