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.

Související články