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();
  1. 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.
  2. 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.
  3. 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.
  4. 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.

Související články