עבור ssl::stream<tcp::socket> דרך proxy HTTP רגיל, השתמשו בתעבורה הגולמית שלו לפני שאתם מבקשים ממנו לבצע TLS אל היעד:

auto& transport = tlsStream.next_layer();
  1. חברו את התעבורה הזו למארח ול-port של ה-proxy. עבור יעד HTTPS ציבורי מורשה ללא פרטי proxy מוגדרים, רשימת ה-proxy של HTTP מציעה נקודות קצה מועמדות; בדקו שהמועמד מאפשר את המנהרה המבוקשת.
  2. שלחו CONNECT עם ה-authority של היעד, כגון api.example:443, ונתחו את כותרות התגובה המלאות בתעבורה הגולמית. 2xx מוצלח פותח את המנהרה; סירוב נשאר תגובת proxy HTTP.
  3. הגדירו את שם המארח של היעד, את ה-SNI הנדרש, שורשי האמון ואימות העמית, ואז התחילו את לחיצת היד של הלקוח על tlsStream.
  4. לאחר ש-TLS מצליח, השתמשו בקריאות וכתיבות של זרם ה-SSL עבור היישום. קריאה ישירה של השכבה הבאה באותה נקודה עוקפת את עיבוד ה-TLS.

העבירו כל עודף של מנתח ה-HTTP לשלב הבא. ל-Asio יש עומסי יתר של לחיצת יד עם חוצץ; השלכת זנב שבבעלות המנתח עלולה לאבד בייטים שכבר נקראו מה-socket.

עם הטיפוס הפשוט הזה, גם next_layer וגם lowest_layer מגיעים ל-TCP. עטיפות נוספות יכולות להבדיל ביניהם, ולכן בחרו בממשק שנושא את פרוטוקול החוט האמיתי של ה-proxy. proxy HTTPS מוסיף שלב TLS נוסף ונמצא מחוץ לרצף ה-CONNECT בטקסט גלוי הזה.

מאמרים קשורים