Apache / 2.2.25 (Win32) mod_ssl / 2.2.25 OpenSSL / 0.9.8y
Я пытаюсь заставить метод HTTP CONNECT работать с Apache. Я тестирую его на двух разных целевых серверах. Он отлично работает с одним сервером, но не работает с другим. Ниже приведена трассировка Wireshark для соединения между сервером Apache и конечным сервером, на котором оно выходит из строя. Похоже, что сервер 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 Привет
Apache -> Destination SSLv3 Alert (уровень: фатальный, описание: сбой рукопожатия)
Apache -> Назначение TCP 57070> https [FIN, ACK] Seq = 80 Ack = 1 Win = 131328 Len = 0
Назначение -> Сервер Apache SSLv3 Привет
Apache -> Назначение TCP 57070> https [RST, ACK] Seq = 81 Ack = 1461 Win = 0 Len = 0
Причина, по которой это не сработало, заключалась в том, что Apache отправляет ответ на запрос CONNECT в виде двух отдельных пакетов:
Пакет 1: HTTP / 1.0 200 соединение установлено
Пакет 2: Прокси-агент: Apache / 2.2.25 (Win32) mod_ssl / 2.2.25 OpenSSL / 0.9.8y
Я вырывался из цикла чтения сокета на «200 Connection», и пакет 2 использовался как Server Hello, так как это был следующий пакет в очереди.