HTTP CONNECT: як HTTP-проксі обробляє HTTPS
Простежте HTTPS-запит через HTTP-проксі, відокремте відповідь CONNECT від відповіді початкового сервера та знайдіть етап збою тунелю.
«200 Connection Established» означає, що проксі приймає тунель. Сайт ще не повернув сторінку. Далі відбувається TLS із цільовим сервером, а потім сам HTTPS-запит.
Від з'єднання з проксі до відповіді сайту
- Клієнт з'єднується з кінцевою точкою проксі.
- Він просить проксі з'єднатися з цільовим вузлом і портом.
- Проксі приймає або відхиляє цей запит.
- Після прийняття клієнт узгоджує TLS із цільовим сервером через тунель.
- Клієнт надсилає HTTPS-запит і отримує відповідь сайту всередині TLS.
Відмова у з'єднанні з проксі, відхилення тунелю й помилка сертифіката виникають на різних етапах цієї послідовності. Перш ніж змінювати налаштування, знайдіть останній завершений крок.
Обмін CONNECT
У HTTP/1.1 спрощений обмін має такий вигляд:
CONNECT example.com:443 HTTP/1.1
Host: example.com:443
HTTP/1.1 200 Connection Established
Ціль запиту — це вузол і порт, без шляху чи параметрів запиту сайту. Після успішної відповіді CONNECT з'єднання передає байти тунелю. Для HTTPS-цілі наступним обміном клієнта є рукостискання TLS.
Читайте числовий код стану, а не шукайте збіг з англійською пояснювальною фразою. Проксі можуть використовувати різний текст для того самого стану.
Спостерігаємо через curl
Для HTTP-проксі на локальному порту 8080:
curl --noproxy '' --proxy http://127.0.0.1:8080 --connect-timeout 5 --max-time 15 --verbose https://example.com/Замініть адресу прослуховування своєю кінцевою точкою. Якщо потрібні кандидати, перегляньте список HTTP-проксі й перевірте вибраний запис. Порожній список винятків гарантує вибір проксі в цьому виклику. У хронологічному порядку шукайте з'єднання з проксі, відповідь CONNECT, перевірку сертифіката цільового сервера й відповідь сайту. Точне формулювання журналу залежить від збірки curl.
Цільовий сервер може повернути 404, 429 або 500 після того, як проксі прийняв тунель. Збій може статися й під час TLS, ще до будь-якої HTTP-відповіді.
Де все зупинилося?
| Спостереження | Що перевіряти далі |
|---|---|
| З'єднання з проксі відхилено | Адресу проксі, порт прослуховування, процес і мережевий доступ. |
| Проксі повертає 407 | Обліковий запис проксі та схему автентифікації. |
| Проксі відхиляє ціль або порт | Політику доступу й дозволені цілі CONNECT. |
| Тунель відкривається, але далі перевірка TLS завершується помилкою | Ім'я цільового сервера, сховище довіри, годинник і можливе кероване перехоплення TLS. |
| TLS успішний, а сайт повертає помилку | Відповідь сайту. |
Для порівняння залишайте одну сторону незмінною: спробуйте іншу ціль через той самий проксі або порівняйте ту саму ціль дозволеним прямим маршрутом.
У тунелю все одно є оператор
Проксі знає ціль CONNECT і обробляє часові характеристики та обсяг трафіку. Звичайний наскрізний TLS захищає прикладний вміст сайту від проксі, який не завершує цю TLS-сесію на собі. У керованого проксі перехоплення, якому довіряє клієнт, інша модель довіри.