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 сесия. Управлявано прокси за прихващане, на което клиентът се доверява, има друг модел на доверие.