Za ssl::stream<tcp::socket> kroz obični HTTP proxy koristite njegov sirovi transport prije nego što ga zamolite da izvrši TLS prema odredištu:

auto& transport = tlsStream.next_layer();
  1. Povežite taj transport s hostom i portom proxyja. Za dopušteno javno HTTPS odredište bez konfiguriranih proxy podataka popis HTTP proxyja nudi kandidatne krajnje točke; provjerite dopušta li kandidat traženi tunel.
  2. Pošaljite CONNECT s authorityjem odredišta, poput api.example:443, i analizirajte cijela zaglavlja odgovora na sirovom transportu. Uspješan 2xx otvara tunel; odbijanje ostaje odgovor HTTP proxyja.
  3. Konfigurirajte ime hosta odredišta, potrebni SNI, korijene povjerenja i provjeru partnera, zatim pokrenite rukovanje klijenta na tlsStream.
  4. Nakon uspješnog TLS-a koristite čitanje i pisanje SSL toka za aplikaciju. Izravno čitanje sljedećeg sloja u tom trenutku zaobilazi TLS obradu.

Prenesite svaki višak HTTP parsera u sljedeću fazu. Asio ima preopterećenja za međuspremljeno rukovanje; odbacivanje repa koji posjeduje parser može izgubiti bajtove već pročitane iz socketa.

Uz ovaj jednostavni tip next_layer i lowest_layer oba dosežu TCP. Više omotača može ih razlikovati, zato odaberite sučelje koje nosi stvarni žičani protokol proxyja. HTTPS proxy dodaje još jednu TLS fazu i nalazi se izvan ovog slijeda CONNECT u čistom tekstu.

Povezani članci