Etabler CONNECT, før Asio-TLS-håndtrykket starter
Brug den næste lag i en Asio SSL-strøm til den almindelige HTTP-proxyudveksling, og start derefter TLS gennem den accepterede tunnel.
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();- 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.
- 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. - Konfigurer destinationens værtsnavn, påkrævet SNI, tillidsrødder og peer-verifikation, og start derefter klienthåndtrykket på
tlsStream. - 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.