Назад | Перейти на главную страницу

Ошибка рукопожатия метода HTTP CONNECT прокси-сервера Apache между сервером Apache и целевым сервером

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, так как это был следующий пакет в очереди.