Stel CONNECT in voordat de Asio-TLS-handshake begint
Gebruik de volgende laag van een Asio SSL-stream voor de gewone HTTP-proxy-uitwisseling en start daarna TLS door de geaccepteerde tunnel.
Voor ssl::stream<tcp::socket> via een gewone HTTP-proxy gebruikt u het onbewerkte transport voordat u er TLS naar de bestemming van vraagt:
auto& transport = tlsStream.next_layer();- Verbind dat transport met de host en poort van de proxy. Voor een toegestaan openbaar HTTPS-doel zonder ingestelde proxyreferenties biedt de HTTP-proxylijst kandidaat-eindpunten; controleer of de kandidaat de gevraagde tunnel toestaat.
- Stuur CONNECT met de authority van het doel, bijvoorbeeld
api.example:443, en analyseer de volledige responsheaders op het onbewerkte transport. Een geslaagde 2xx opent de tunnel; een weigering blijft een HTTP-proxyrespons. - Configureer de hostnaam van het doel, de vereiste SNI, vertrouwenswortels en peer-verificatie en start dan de clienthandshake op
tlsStream. - Gebruik na een geslaagde TLS de lees- en schrijfbewerkingen van de SSL-stream voor de toepassing. De volgende laag op dat moment rechtstreeks lezen omzeilt TLS-verwerking.
Neem eventueel overschot van de HTTP-parser mee naar de volgende fase. Asio heeft overbelastingen voor gebufferde handshakes; het weggooien van een staart die de parser bezit kan bytes verliezen die al uit de socket zijn gelezen.
Met dit eenvoudige type bereiken zowel next_layer als lowest_layer TCP. Meer wrappers kunnen ze verschillend maken, dus kies de interface die het werkelijke wire-protocol van de proxy draagt. Een HTTPS-proxy voegt nog een TLS-stap toe en valt buiten deze CONNECT-reeks in platte tekst.