Калі CONNECT вяртае 200, а TLS адразу не дэкадуецца, праверце межныя байты ў канэктары, перш чым мяняць сертыфікаты або шыфры.

Згенераванае значэнне аўтарызацыі можа ўжо заканчвацца пераносам радка. Даданне яшчэ аднаго канца радка можа завяршыць загалоўкі HTTP загадзя, пакінуўшы патрэбнае поле Host або іншы адкрыты тэкст за запытам.

Мінімальны запыт HTTP/1.1 CONNECT выкарыстоўвае CRLF паміж радкамі і пусты радок у канцы:

b"CONNECT example.com:443 HTTP/1.1\r\nHost: example.com:443\r\n\r\n"

Змяшчайце любое поле аўтарызацыі перад гэтым апошнім пустым радком, без убудаванага пераносу. У Python "\n" азначае перанос радка; сыры радок з backslash і літарай n — не. Праверце, якія байты стварае дапаможнік кадавання, перш чым спрабаваць іх выдаліць—старыя дапаможнікі маглі дадаваць пераносы.

Пасля паспяховага CONNECT гэтыя астатнія байты належаць пратаколу тунэля. Выпадковы адкрыты тэкст можа трапіць да партнёра, які чакае TLS. Паспяховы статус не можа выправіць байты, якія ўжо стаяць у чарзе пасля скажонага запыту.

Праверце таксама мяжу прыёму. Прачытайце поўны адказ проксі, перш чым перадаць сокет TLS, апрацуйце частковыя чытанні і захавайце ўсё, што прачытана пасля загалоўкаў. Адно чытанне сокета не абавязана змяшчаць адно цэлае паведамленне.

Калі гэты парсер ваш, параўнайце адрэдагаванае прадстаўленне байтаў з граматыкай дроту; трымайце даўжыні і межы радкоў бачнымі, хаваючы пароль. Для праграмы, якой патрэбна толькі проксі-злучэнне, падтрымліваемы канэктар пазбаўляе ад неабходнасці валодаць гэтым кодам фарміравання.

Падобныя артыкулы