Opprett CONNECT før Asio-TLS-håndtrykket begynner
Bruk det neste laget i en Asio SSL-strøm for den vanlige HTTP-proxyutvekslingen, og start deretter TLS gjennom den godtatte tunnelen.
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();- 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.
- 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. - Konfigurer destinasjonens vertsnavn, nødvendig SNI, tillitsrøtter og peer-verifisering, og start deretter klienthåndtrykket på
tlsStream. - 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.