For ssl::stream<tcp::socket> gennem en almindelig HTTP-proxy skal du bruge dens rå transport, før du beder den om at udføre TLS mod destinationen:

auto& transport = tlsStream.next_layer();
  1. Forbind den transport til proxyens vært og port. Til en tilladt offentlig HTTPS-destination uden konfigurerede proxyoplysninger tilbyder HTTP-proxylisten kandidatendepunkter; kontroller, at kandidaten tillader den ønskede tunnel.
  2. Send CONNECT med destinationens authority, for eksempel api.example:443, og parse de fulde svarheadere på den rå transport. Et vellykket 2xx åbner tunnelen; en afvisning forbliver et HTTP-proxysvar.
  3. Konfigurer destinationens værtsnavn, påkrævet SNI, tillidsrødder og peer-verifikation, og start derefter klienthåndtrykket på tlsStream.
  4. Når TLS er lykkedes, brug SSL-strømmens læsning og skrivning til applikationen. At læse det næste lag direkte på det tidspunkt omgår TLS-behandlingen.

Tag ethvert overskud fra HTTP-parseren med til næste trin. Asio har overbelastninger til bufferet håndtryk; at kassere en hale, som parseren ejer, kan miste bytes, der allerede er læst fra socketten.

Med denne enkle type når både next_layer og lowest_layer TCP. Flere wrappere kan gøre dem forskellige, så vælg det interface, der bærer proxyens faktiske wire-protokol. En HTTPS-proxy tilføjer endnu et TLS-trin og ligger uden for denne klartekst-CONNECT-sekvens.

Relaterede artikler