Upprätta CONNECT innan Asio TLS-handskakningen startar
Använd Asio SSL-strömmens underliggande lager för utbytet med en vanlig HTTP-proxy och starta sedan TLS genom den accepterade tunneln.
För ssl::stream<tcp::socket> genom en vanlig HTTP-proxy använder du först dess råa transport och ber den sedan utföra TLS mot målet:
auto& transport = tlsStream.next_layer();
- Anslut transporten till proxyns värd och port. När ett tillåtet offentligt HTTPS-mål används utan proxyuppgifter erbjuder HTTP-proxylistan kandidater; kontrollera att kandidaten tillåter den begärda tunneln.
- Skicka CONNECT med målets authority, till exempel
api.example:443, och tolka de fullständiga svarshuvudena på den enkla transporten. En lyckad 2xx öppnar tunneln; ett avslag är fortfarande ett HTTP-proxysvar. - Konfigurera målvärdnamnet, nödvändig SNI, betrodda rötter och peer-verifiering och starta sedan klienthandskakningen på
tlsStream. - När TLS har lyckats använder du SSL-strömmens läsning och skrivning för programmet. Att läsa det underliggande lagret direkt vid den punkten kringgår TLS-bearbetningen.
Ta med eventuellt överskott från HTTP-tolken till nästa steg. Asio har buffrade handskakningsöverlagringar; att kasta bort en svans som tolken äger kan förlora byte som redan lästs från socketen.
Med den här enkla typen når både next_layer och lowest_layer TCP. Fler omslag kan göra dem olika, så välj det gränssnitt som bär proxyns faktiska trådprotokoll. En HTTPS-proxy lägger till ytterligare ett TLS-steg och ligger utanför denna CONNECT-sekvens i klartext.