Navázání CONNECT před spuštěním TLS handshake v Asiu
Použijte následující vrstvu Asio SSL streamu pro běžnou výměnu přes HTTP proxy a poté spusťte TLS přijatým tunelem.
Pro ssl::stream<tcp::socket> přes běžnou HTTP proxy použijte jeho surový transport, než ho požádáte o TLS k cíli:
auto& transport = tlsStream.next_layer();- Připojte tento transport k hostiteli a portu proxy. Pro povolený veřejný cíl HTTPS bez nakonfigurovaných přihlašovacích údajů proxy nabízí seznam HTTP proxy kandidátské koncové body; ověřte, že kandidát povoluje požadovaný tunel.
- Odešlete CONNECT s authority cíle, například
api.example:443, a rozeberte úplné hlavičky odpovědi na surovém transportu. Úspěšné 2xx otevře tunel; odmítnutí zůstává odpovědí HTTP proxy. - Nastavte název hostitele cíle, požadované SNI, důvěryhodné kořeny a ověření protistrany, poté spusťte handshake klienta na
tlsStream. - Po úspěšném TLS používejte pro aplikaci čtení a zápis SSL streamu. Přímé čtení následující vrstvy v tomto okamžiku obchází zpracování TLS.
Předejte případný přebytek HTTP parseru do dalšího kroku. Asio má přetížení pro bufferovaný handshake; zahození ocasu vlastněného parserem může ztratit bajty již přečtené ze socketu.
S tímto jednoduchým typem dosáhnou next_layer i lowest_layer TCP. Více obálek je může odlišit, proto zvolte rozhraní nesoucí skutečný drátový protokol proxy. HTTPS proxy přidává další vrstvu TLS a stojí mimo tuto sekvenci CONNECT v otevřeném textu.