Keď CONNECT vráti 200 a TLS okamžite nedekóduje, prezrite hraničné bajty v konektore, než zmeníte certifikáty alebo šifry.

Vygenerovaná hodnota autorizácie sa už môže končiť novým riadkom. Pridanie ďalšieho konca riadku môže ukončiť HTTP hlavičky príliš skoro a nechať zamýšľané pole Host alebo iný otvorený text za požiadavkou.

Minimálna požiadavka HTTP/1.1 CONNECT používa CRLF medzi riadkami a prázdny riadok na konci:

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

Umiestnite akékoľvek pole autorizácie pred tento záverečný prázdny riadok, bez vloženého zlomu riadku. V Pythone "\n" predstavuje nový riadok; surový reťazec s backslashom a písmenom n nie. Skontrolujte, ktoré bajty vytvára pomocník kódovania, než sa ich pokúsite odstrániť—staršie pomocníky mohli pridávať zlomy riadkov.

Keď CONNECT uspeje, tie zostávajúce bajty patria tunelovému protokolu. Zblúdilý otvorený text sa môže dostať k partnerovi, ktorý očakáva TLS. Úspešný stav nemôže opraviť bajty už zaradené do frontu po nesprávnej požiadavke.

Skontrolujte aj hranicu príjmu. Prečítajte celú odpoveď proxy, než odovzdáte socket TLS, ošetrite čiastočné čítania a zachovajte všetko prečítané za hlavičkami. Jedno čítanie socketu nemusí obsahovať jednu celú správu.

Ak tento parser vlastníte, porovnajte redigovanú reprezentáciu bajtov s gramatikou drôtu; udržujte dĺžky a hranice riadkov viditeľné a pritom skrývajte heslo. Aplikácii, ktorá potrebuje iba proxy pripojenie, ušetrí udržiavaný konektor nutnosť vlastniť tento rámovací kód.

Súvisiace články