Pre ssl::stream<tcp::socket> cez bežný HTTP proxy najprv použite jeho surový transport a až potom mu zverte TLS voči cieľu:

auto& transport = tlsStream.next_layer();
  1. Pripojte tento transport k hostiteľovi a portu proxy. Keď je povolený verejný cieľ HTTPS a nie sú nastavené prihlasovacie údaje proxy, zoznam HTTP proxy ponúka kandidátske koncové body; overte, či vybraný kandidát povoľuje požadovaný tunel.
  2. Odošlite CONNECT s authority cieľa, napríklad api.example:443, a analyzujte úplné hlavičky odpovede na čistom transporte. Úspešná 2xx otvorí tunel; odmietnutie zostáva odpoveďou HTTP proxy.
  3. Nastavte názov cieľového hostiteľa, požadované SNI, dôveryhodné korene a overenie peer, potom spustite handshake klienta na tlsStream.
  4. Po úspešnom TLS používajte pre aplikáciu čítanie a zápis cez SSL stream. Priame čítanie spodnej vrstvy v tomto bode obchádza spracovanie TLS.

Preneste zvyšok buffera HTTP parsera do ďalšej fázy. Asio má preťaženia handshake s bufferom; zahodenie chvosta, ktorý vlastní parser, môže stratiť bajty už prečítané zo socketu.

V tomto jednoduchom type dosahujú next_layer aj lowest_layer TCP. Viac obalov ich môže odlíšiť, preto zvoľte rozhranie, ktoré nesie skutočný drôtový protokol proxy. HTTPS proxy pridáva ďalšiu fázu TLS a do tejto sekvencie CONNECT v čistom texte nepatrí.

Súvisiace články