我有一个使用 SSL 连接到 apache http 服务器的 Jetty HttpClient 设置,该服务器将请求作为 HTTP 路由到 Web 服务器:
HttpClient <--HTTPS--> http 服务器 <--HTTP--> 网络服务器。
这个设置已经工作了一段时间。
我现在正在尝试添加代理:
HttpClient <--HTTPS using CONNECT method--> proxy <--HTTPS--> http server <--HTTP--> web server
我正在使用以下代码来设置代理:
httpClient.setProxy(new Address("proxyHost", proxyPort));
代理不需要身份验证。
SSL 握手似乎开始正常,查看 TCP 转储,我可以看到我收到了“服务器你好”响应。但是,稍后握手失败,http 服务器日志中显示以下错误:
[2013 年 6 月 26 日星期三 12:49:42] [调试] ssl_engine_io.c(1925):OpenSSL:I/O 错误,预计在 BIO#7faefe130d00 上读取 5 个字节 [内存:7faefe11f203]
由于握手失败,没有 HTTP 请求被转发到 Web 服务器。
使用相同的设置,但如https://stackoverflow.com/a/1512268/378060中所述,用 url.openConnection() 和 HttpsURLConnection 配置替换 Jetty HttpClient工作正常。
配置代理和证书后从浏览器连接也可以。
版本详情:
Jetty HttpClient:试过 7.4.2、7.6.11、8.1.11 (Windows)
代理是 squid 2.7 (Windows)
apache http server 2.2.15(linux)