Stabilește CONNECT înainte de a începe handshake-ul TLS al Asio
Folosește stratul inferior al fluxului SSL Asio pentru schimbul cu un proxy HTTP obișnuit, apoi pornește TLS prin tunelul acceptat.
Pentru ssl::stream<tcp::socket> printr-un proxy HTTP obișnuit, folosește mai întâi transportul brut, apoi cere-i să facă TLS către destinație:
auto& transport = tlsStream.next_layer();
- Conectează acel transport la gazda și portul proxy-ului. Când destinația publică HTTPS este permisă și nu sunt configurate credențiale de proxy, lista de proxy HTTP oferă puncte finale candidate; verifică dacă punctul ales permite tunelul cerut.
- Trimite CONNECT cu authority-ul destinației, de exemplu
api.example:443, și analizează antetele complete ale răspunsului pe transportul simplu. Un răspuns 2xx deschide tunelul; un refuz rămâne un răspuns de proxy HTTP. - Configurează numele gazdei destinație, SNI-ul necesar, rădăcinile de încredere și verificarea peer-ului, apoi pornește handshake-ul clientului pe
tlsStream. - După ce TLS reușește, folosește citirile și scrierile prin fluxul SSL pentru aplicație. Citirea directă a stratului inferior în acel moment ocolește procesarea TLS.
Transportă surplusul parserului HTTP în etapa următoare. Asio are supraîncărcări de handshake cu buffer; aruncarea cozii deținute de parser poate pierde octeți deja citiți din socket.
În acest tip simplu, next_layer și lowest_layer ajung amândouă la TCP. Mai multe învelișuri le pot face diferite, așa că alege interfața care poartă protocolul real al proxy-ului. Un proxy HTTPS adaugă încă o etapă TLS și nu face parte din această secvență CONNECT în clar.