For ssl::stream<tcp::socket> gjennom ein vanleg HTTP-proxy brukar du den rå transporten før du ber han utføre TLS mot målet:

auto& transport = tlsStream.next_layer();
  1. Kopla transporten til verten og porten til proxyen. For eit tillate offentleg HTTPS-mål utan konfigurerte proxy-innloggingar tilbyr HTTP-proxylista kandidatendepunkt; kontroller at kandidaten tillèt tunnelen som er beden om.
  2. Send CONNECT med authority til målet, til dømes api.example:443, og analyser dei fullstendige svarhovuda på den rå transporten. Eit vellukka 2xx opnar tunnelen; ei avvising blir verande eit HTTP-proxysvar.
  3. Konfigurer vertsnamnet til målet, påkravd SNI, tillitsrøter og peer-verifisering, og start deretter klienthandtrykket på tlsStream.
  4. Når TLS er vellukka, bruk lesing og skriving av SSL-straumen for applikasjonen. Å lese neste lag direkte på det tidspunktet omgår TLS-handsaminga.

Ta med eventuelt overskot frå HTTP-parsaren til neste trinn. Asio har overlastingar for bufra handtrykk; å kaste ein hale som parsaren eig kan miste byte som alt er lesne frå sokkelen.

Med denne enkle typen når både next_layer og lowest_layer TCP. Fleire wrapparar kan gjere dei ulike, så vel grensesnittet som ber den faktiske wire-protokollen til proxyen. Ein HTTPS-proxy legg til eit ekstra TLS-trinn og ligg utanfor denne klartekst-CONNECT-sekvensen.

Relaterte artiklar