Jetty HttpClient通过代理使用SSL连接

时间:2013-06-27 11:04:49

标签: ssl https proxy jetty

我有一个Jetty的HttpClient设置,使用SSL连接到apache http服务器,它将请求作为HTTP路由到Web服务器:

HttpClient< - HTTPS - > http服务器< - HTTP - >网络服务器。

此设置已经工作了一段时间 我现在正在尝试添加代理:
HttpClient< - 使用CONNECT方法的HTTPS - >代理< - HTTPS - > http服务器< - HTTP - >网络服务器

我使用以下代码设置代理:

  

httpClient.setProxy(新地址(" proxyHost",proxyPort));

代理不需要身份验证。

SSL握手似乎开始正常,看着TCP转储,我可以看到我得到了服务器问候'响应。 但是,握手以后会失败,并在http服务器日志中显示以下错误:

  

[Wed Jun 26 12:49:42 2013] [debug] ssl_engine_io.c(1925):OpenSSL:I / O错误,预计在BIO上读取5个字节#7faefe130d00 [mem:7faefe11f203]

由于握手失败,因此不会将HTTP请求转发到Web服务器。

使用相同的设置,但使用url.openConnection()和HttpsURLConnection配置替换Jetty HttpClient,如https://stackoverflow.com/a/1512268/378060中所述,工作正常。

配置代理和证书后从浏览器连接也可以。

版本细节:
Jetty HttpClient:试过7.4.2,7.6.11,8.1.11(Windows)
代理是鱿鱼2.7(Windows)
apache http server 2.2.15(linux)

1 个答案:

答案 0 :(得分:0)

问题与此处描述的问题相同:http://dev.eclipse.org/mhonarc/lists/jetty-users/msg01854.html Squid 2.7不符合Http 1.1,但是Http 1.0,所以它没有响应Jetty的代理连接的keep-alive头:keep-alive头。然后Jetty被迫根据Http 1.0规则关闭连接。