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();
  1. 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.
  2. 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.
  3. Konfigurera målvärdnamnet, nödvändig SNI, betrodda rötter och peer-verifiering och starta sedan klienthandskakningen på tlsStream.
  4. 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.

Relaterade artiklar