Za ssl::stream<tcp::socket> prek običajnega proxyja HTTP najprej uporabite njegov surovi transport in šele nato mu zaupajte TLS do cilja:

auto& transport = tlsStream.next_layer();
  1. Ta transport povežite z gostiteljem in vrati proxyja. Ko je javni cilj HTTPS dovoljen in poverilnice proxyja niso nastavljene, seznam proxyjev HTTP ponuja kandidatne končne točke; preverite, ali izbrani kandidat dovoljuje zahtevani tunel.
  2. Pošljite CONNECT z navedbo authorityja cilja, na primer api.example:443, in razčlenite celotne glave odgovora na čistem transportu. Uspešna 2xx odpre tunel; zavrnitev ostane odgovor proxyja HTTP.
  3. Nastavite ime ciljnega gostitelja, zahtevani SNI, korenska potrdila zaupanja in preverjanje peerja, nato zaženite handshake odjemalca na tlsStream.
  4. Po uspešnem TLS za aplikacijo uporabljajte branje in pisanje skozi tok SSL. Neposredno branje spodnje plasti na tej točki obide obdelavo TLS.

Morebitni ostanek medpomnilnika parserja HTTP prenesite v naslednjo stopnjo. Asio ima preobremenitve handshaka z medpomnilnikom; če zavržete rep, ki ga ima parser, lahko izgubite bajte, ki so že prebrani iz vtičnice.

Pri tej preprosti vrsti dosežeta next_layer in lowest_layer oba TCP. Več ovojev ju lahko razlikuje, zato izberite vmesnik, ki nosi dejanski žični protokol proxyja. Proxy HTTPS doda še eno stopnjo TLS in ne spada v to zaporedje CONNECT v čistem besedilu.

Sorodni članki