Når ssl::stream<tcp::socket> går gjennom en vanlig HTTP-proxy, bruker du den rå transporten før du ber den gjøre TLS mot destinasjonen:

auto& transport = tlsStream.next_layer();
  1. Koble transporten til proxyens vert og port. For en tillatt offentlig HTTPS-destinasjon uten konfigurerte proxy-påloggingsdetaljer tilbyr HTTP-proxy-listen kandidatendepunkter; sjekk at kandidaten tillater tunnelen som er forespurt.
  2. Send CONNECT med destinasjonens authority, for eksempel api.example:443, og tolk de fullstendige svarhodene på den rå transporten. En vellykket 2xx åpner tunnelen; en avvisning forblir et HTTP-proxy-svar.
  3. Konfigurer destinasjonens vertsnavn, nødvendig SNI, tillitsrøtter og peer-verifisering, og start deretter klienthåndtrykket på tlsStream.
  4. Etter at TLS er vellykket, bruk lesing og skriving på SSL-strømmen for applikasjonen. Å lese neste lag direkte på det tidspunktet omgår TLS-behandlingen.

Ta med eventuelt overskudd fra HTTP-parseren til neste trinn. Asio har overlastinger for bufret håndtrykk; å forkaste en hale som parseren eier kan miste byte som allerede er lest fra sockelen.

Med denne enkle typen når både next_layer og lowest_layer TCP. Flere wrappere kan gjøre dem forskjellige, så velg grensesnittet som bærer proxyens faktiske wire-protokoll. En HTTPS-proxy legger til ett ekstra TLS-trinn og ligger utenfor denne klartekst-CONNECT-sekvensen.

Relaterte artikler