Por ssl::stream<tcp::socket> tra ordinara HTTP-prokuro, uzu ĝian krudan transporton antaŭ ol peti ĝin fari TLS al la celo:

auto& transport = tlsStream.next_layer();
  1. Konektu tiun transporton al la prokura gastiganto kaj pordo. Por permesita publika HTTPS-celo sen agorditaj prokuraj legitimiloj, la listo de HTTP-prokuroj proponas kandidatajn finpunktojn; kontrolu, ĉu la kandidato permesas la petitan tunelon.
  2. Sendu CONNECT nomante la aŭtoritaton de la celo, ekzemple api.example:443, kaj analizu la kompletan respondan kaplinion sur la kruda transporto. Sukcesa 2xx malfermas la tunelon; rifuzo restas HTTP-prokura respondo.
  3. Agordi la gastigantnomon de la celo, la postulatan SNI, fido-radikojn kaj samtavolulon, poste komencu la klientan manpremon sur tlsStream.
  4. Post sukcesa TLS, uzu legadojn kaj skribojn de la SSL-fluo por la aplikaĵo. Rekte legi la sekvan tavolon ĉe tiu punkto preterpasas TLS-traktadon.

Portu ajnan superfluon de la HTTP-analizilo al la sekva etapo. Asio havas ŝargitajn manpremajn variantojn; forĵeti voston posedatan de la analizilo povas perdi bajtojn jam legitajn el la ingo.

Kun ĉi tiu simpla tipo, next_layer kaj lowest_layer ambaŭ atingas TCP. Pli da volvaĵoj povas malsamigi ilin, do elektu la interfacon portantan la realan dratan protokolon de la prokuro. HTTPS-prokuro aldonas alian TLS-etapon kaj staras ekster ĉi tiu klarteksta CONNECT-sekvenco.

Rilataj artikoloj