Kun ssl::stream<tcp::socket> kulkee tavallisen HTTP-välityspalvelimen kautta, käytä sen raakaa siirtokerrosta ennen kuin pyydät sitä tekemään TLS:n kohteeseen:

auto& transport = tlsStream.next_layer();
  1. Yhdistä tuo siirtokerros välityspalvelimen isäntään ja porttiin. Sallitulle julkiselle HTTPS-kohteelle, jossa välityspalvelimen tunnuksia ei ole määritetty, HTTP-välityspalvelinluettelo tarjoaa ehdokaspäätepisteitä; varmista, että ehdokas sallii pyydetyn tunnelin.
  2. Lähetä CONNECT ilmoittaen kohteen authority, esimerkiksi api.example:443, ja jäsennä täydet vastausotsakkeet raa'alla siirtokerroksella. Onnistunut 2xx avaa tunnelin; kieltäytyminen jää HTTP-välityspalvelimen vastaukseksi.
  3. Määritä kohteen isäntänimi, vaadittu SNI, luottamusjuuret ja vertaisvarmennus ja aloita sitten asiakkaan kättely tlsStream:ssa.
  4. Kun TLS onnistuu, käytä SSL-virran lukuja ja kirjoituksia sovellukselle. Seuraavan kerroksen lukeminen suoraan siinä kohdassa ohittaa TLS-käsittelyn.

Siirrä HTTP-jäsentimen ylijäämä seuraavaan vaiheeseen. Asiossa on puskuroidun kättelyn ylikuormituksia; jäsentimen omistaman hännän hylkääminen voi kadottaa tavuja, jotka on jo luettu pistokkeesta.

Tällä yksinkertaisella tyypillä sekä next_layer että lowest_layer yltävät TCP:hen. Useammat kääreet voivat erottaa ne, joten valitse rajapinta, joka kuljettaa välityspalvelimen todellista wire-protokollaa. HTTPS-välityspalvelin lisää vielä yhden TLS-vaiheen ja on tämän selkokielisen CONNECT-jakson ulkopuolella.

Aiheeseen liittyvät artikkelit