Užmegzkite CONNECT prieš pradėdami Asio TLS rankos paspaudimą
Naudokite kitą Asio SSL srauto sluoksnį įprastam HTTP tarpinio serverio mainams, tada pradėkite TLS priimtu tuneliu.
Jei ssl::stream<tcp::socket> eina per įprastą HTTP tarpinį serverį, naudokite jo neapdorotą transportą prieš prašydami atlikti TLS iki paskirties:
auto& transport = tlsStream.next_layer();- Prijunkite tą transportą prie tarpinio serverio hosto ir prievado. Leidžiamai viešai HTTPS paskirčiai, kai tarpinio serverio prisijungimo duomenys nesukonfigūruoti, HTTP tarpinių serverių sąrašas siūlo kandidatų galinius taškus; patikrinkite, ar kandidatas leidžia prašomą tunelį.
- Siųskite CONNECT nurodydami paskirties authority, pavyzdžiui
api.example:443, ir išnagrinėkite pilnas atsakymo antraštes neapdorotame transporte. Sėkmingas 2xx atidaro tunelį; atmetimas lieka HTTP tarpinio serverio atsakymu. - Sukonfigūruokite paskirties hosto vardą, reikiamą SNI, pasitikėjimo šaknis ir partnerio patikrą, tada pradėkite kliento rankos paspaudimą
tlsStream. - Kai TLS pavyksta, naudokite SSL srauto skaitymą ir rašymą programai. Tiesioginis kito sluoksnio skaitymas tuo metu apeina TLS apdorojimą.
Perkelkite bet kokį HTTP analizatoriaus perteklių į kitą etapą. Asio turi buferizuoto rankos paspaudimo perkrovų; analizatoriui priklausančios uodegos atmetimas gali prarasti baitus, jau perskaitytus iš lizdo.
Su šiuo paprastu tipu tiek next_layer, tiek lowest_layer pasiekia TCP. Daugiau apvalkalų gali juos atskirti, todėl rinkitės sąsają, kuri neša tikrąjį tarpinio serverio laidinį protokolą. HTTPS tarpinis serveris prideda dar vieną TLS etapą ir yra už šios atviro teksto CONNECT sekos.