Apache/2.2.25 (Win32) mod_ssl/2.2.25 OpenSSL/0.9.8y
我正在尝试让 HTTP CONNECT 方法与 Apache 配合使用。我正在使用两个不同的目标服务器对其进行测试。它在一台服务器上运行良好,但在另一台服务器上失败。以下是 Apache 服务器与失败的目标服务器之间的连接的 Wireshark 跟踪。看起来 Apache 服务器在给目标服务器发送 Server Hello 机会之前发送了警报。为什么会发生这种情况?
Apache -> 目标 TCP 57070 > https [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1
目标 -> Apache TCP https > 57070 [SYN,ACK] Seq=0 Ack=1 Win=4380 Len=0 MSS=1460 WS=1 SACK_PERM=1
Apache -> 目标 TCP 57070 > https [ACK] Seq=1 Ack=1 Win=131328 Len=0
Apache -> 目标 SSLv3 客户端 Hello
Apache -> 目标 SSLv3 警报(级别:致命,描述:握手失败)
Apache -> 目标 TCP 57070 > https [FIN,ACK] Seq=80 Ack=1 Win=131328 Len=0
目标 -> Apache SSLv3 服务器 Hello
Apache -> 目标 TCP 57070 > https [RST,ACK] Seq=81 Ack=1461 Win=0 Len=0
答案1
这不起作用的原因是 Apache 将对 CONNECT 请求的响应作为两个单独的数据包发送:
数据包 1:HTTP/1.0 200 连接已建立
数据包 2:代理:Apache/2.2.25 (Win32) mod_ssl/2.2.25 OpenSSL/0.9.8y
我正在从“200 连接”上的套接字读取循环中断开,并且数据包 2 被用作服务器 Hello,因为它是队列中的下一个数据包。