Magtatag ng CONNECT bago simulan ang Asio TLS handshake
Gamitin ang susunod na layer ng Asio SSL stream para sa plain HTTP proxy exchange, pagkatapos simulan ang TLS sa tinanggap na tunnel.
Para sa ssl::stream<tcp::socket> sa pamamagitan ng karaniwang HTTP proxy, gamitin muna ang raw transport nito bago ito utusan sa TLS ng destinasyon:
auto& transport = tlsStream.next_layer();
- Ikonekta ang transport na iyon sa host at port ng proxy. Kapag pinapayagan ang pampublikong HTTPS na destinasyon at walang naka-configure na kredensyal ng proxy, listahan ng HTTP proxy ang nag-aalok ng mga kandidatong endpoint; tiyakin na pinapayagan ng kandidato ang hinihinging tunnel.
- Magpadala ng CONNECT na nagsasaad ng authority ng destinasyon, gaya ng
api.example:443, at suriin ang buong header ng tugon sa plain transport. Binubuksan ng matagumpay na 2xx ang tunnel; ang pagtanggi ay nananatiling tugon ng HTTP proxy. - Isaayos ang hostname ng destinasyon, kinakailangang SNI, trust roots at peer verification, pagkatapos simulan ang handshake ng kliyente sa
tlsStream. - Kapag nagtagumpay ang TLS, gamitin ang pagbasa at pagsulat sa SSL stream para sa aplikasyon. Ang direktang pagbasa sa susunod na layer sa puntong iyon ay lumalampas sa pagpoproseso ng TLS.
Dalhin ang anumang sobra ng HTTP parser sa susunod na yugto. May mga buffered handshake overload ang Asio; ang pagtatapon ng buntot na pagmamay-ari ng parser ay maaaring mawalan ng mga byte na nabasa na mula sa socket.
Sa simpleng uri na ito, ang next_layer at lowest_layer ay parehong umaabot sa TCP. Maaaring paghiwalayin sila ng mas maraming wrapper, kaya piliin ang interface na nagdadala ng aktwal na wire protocol ng proxy. Ang HTTPS proxy ay nagdaragdag ng isa pang TLS stage at wala sa plaintext CONNECT sequence na ito.