הקימו CONNECT לפני תחילת לחיצת היד של Asio TLS
השתמשו בשכבה הבאה של זרם SSL של Asio להחלפת ה-HTTP הרגילה דרך ה-proxy, ואז התחילו TLS דרך המנהרה שהתקבלה.
עבור ssl::stream<tcp::socket> דרך proxy HTTP רגיל, השתמשו בתעבורה הגולמית שלו לפני שאתם מבקשים ממנו לבצע TLS אל היעד:
auto& transport = tlsStream.next_layer();- חברו את התעבורה הזו למארח ול-port של ה-proxy. עבור יעד HTTPS ציבורי מורשה ללא פרטי proxy מוגדרים, רשימת ה-proxy של HTTP מציעה נקודות קצה מועמדות; בדקו שהמועמד מאפשר את המנהרה המבוקשת.
- שלחו CONNECT עם ה-authority של היעד, כגון
api.example:443, ונתחו את כותרות התגובה המלאות בתעבורה הגולמית. 2xx מוצלח פותח את המנהרה; סירוב נשאר תגובת proxy HTTP. - הגדירו את שם המארח של היעד, את ה-SNI הנדרש, שורשי האמון ואימות העמית, ואז התחילו את לחיצת היד של הלקוח על
tlsStream. - לאחר ש-TLS מצליח, השתמשו בקריאות וכתיבות של זרם ה-SSL עבור היישום. קריאה ישירה של השכבה הבאה באותה נקודה עוקפת את עיבוד ה-TLS.
העבירו כל עודף של מנתח ה-HTTP לשלב הבא. ל-Asio יש עומסי יתר של לחיצת יד עם חוצץ; השלכת זנב שבבעלות המנתח עלולה לאבד בייטים שכבר נקראו מה-socket.
עם הטיפוס הפשוט הזה, גם next_layer וגם lowest_layer מגיעים ל-TCP. עטיפות נוספות יכולות להבדיל ביניהם, ולכן בחרו בממשק שנושא את פרוטוקול החוט האמיתי של ה-proxy. proxy HTTPS מוסיף שלב TLS נוסף ונמצא מחוץ לרצף ה-CONNECT בטקסט גלוי הזה.