Jeden nový řádek navíc může po CONNECT rozbít TLS
Zkontrolujte rámování HTTP hlaviček, když ručně psaný proxy konektor otevře tunel a okamžitě vyprodukuje chybu dekódování TLS.
Když CONNECT vrátí 200 a TLS okamžitě nedekóduje, prohlédněte hraniční bajty v konektoru, než změníte certifikáty nebo šifry.
Vygenerovaná hodnota autorizace může už končit novým řádkem. Přidání dalšího konce řádku může ukončit HTTP hlavičky příliš brzy a nechat zamýšlené pole Host nebo jiný otevřený text za požadavkem.
Minimální požadavek HTTP/1.1 CONNECT používá CRLF mezi řádky a prázdný řádek na konci:
b"CONNECT example.com:443 HTTP/1.1\r\nHost: example.com:443\r\n\r\n"Umístěte jakékoli pole autorizace před tento závěrečný prázdný řádek, bez vloženého zlomu řádku. V Pythonu "\n" představuje nový řádek; surový řetězec s backslashem a písmenem n nikoli. Zkontrolujte, které bajty pomocník kódování vytváří, než se je pokusíte odstranit—starší pomocníci mohli přidávat zlomy řádků.
Jakmile CONNECT uspěje, tyto zbývající bajty patří tunelovému protokolu. Zbloudilý otevřený text se může dostat k protějšku, který očekává TLS. Úspěšný stav nemůže opravit bajty už zařazené po špatně vytvořeném požadavku.
Zkontrolujte také hranici příjmu. Přečtěte celou odpověď proxy, než předáte soket TLS, ošetřete částečná čtení a zachovejte vše přečtené za hlavičkami. Jedno čtení soketu nemusí obsahovat jednu celou zprávu.
Pokud tento parser vlastníte, porovnejte redigovanou reprezentaci bajtů s gramatikou drátu; udržujte délky a hranice řádků viditelné a přitom skrývejte heslo. Aplikaci, která potřebuje jen proxy připojení, ušetří udržovaný konektor nutnosti vlastnit tento rámovací kód.