Uspostavite CONNECT prije početka Asio TLS rukovanja
Koristite sljedeći sloj Asio SSL toka za običnu HTTP proxy razmjenu, a zatim pokrenite TLS kroz prihvaćeni tunel.
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();- 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.
- 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. - Konfigurirajte ime hosta odredišta, potrebni SNI, korijene povjerenja i provjeru partnera, zatim pokrenite rukovanje klijenta na
tlsStream. - 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.