CONNECT را پیش از آغاز دستدهی TLS در Asio برقرار کنید
از لایه بعدی یک جریان SSL در Asio برای تبادل ساده HTTP از طریق پروکسی استفاده کنید و سپس TLS را از طریق تونل پذیرفتهشده آغاز کنید.
برای ssl::stream<tcp::socket> از طریق یک پروکسی HTTP معمولی، پیش از آنکه از آن TLS به مقصد بخواهید، از انتقال خام آن استفاده کنید:
auto& transport = tlsStream.next_layer();- آن انتقال را به میزبان و درگاه پروکسی وصل کنید. برای یک مقصد HTTPS عمومی مجاز بدون اعتبارنامه پروکسی تنظیمشده، فهرست پروکسی HTTP نقاط پایانی نامزد ارائه میدهد؛ بررسی کنید که نامزد تونل درخواستی را مجاز میداند.
- CONNECT را با نام authority مقصد بفرستید، مثلاً
api.example:443، و سرصفحههای کامل پاسخ را روی انتقال خام تجزیه کنید. یک 2xx موفق تونل را باز میکند؛ رد شدن همچنان پاسخ پروکسی HTTP است. - نام میزبان مقصد، SNI لازم، ریشههای اعتماد و تأیید همتا را پیکربندی کنید، سپس دستدهی سمت کلاینت را روی
tlsStreamآغاز کنید. - پس از موفقیت TLS، برای برنامه از خواندن و نوشتن جریان SSL استفاده کنید. خواندن مستقیم لایه بعدی در آن لحظه پردازش TLS را دور میزند.
هر مازاد تجزیهگر HTTP را به مرحله بعد ببرید. Asio بارگذاریهای اضافی دستدهی بافرشده دارد؛ دور انداختن دنبالهای که در اختیار تجزیهگر است میتواند بایتهایی را که پیشتر از سوکت خوانده شده از دست بدهد.
با این نوع ساده، next_layer و lowest_layer هر دو به TCP میرسند. پوششهای بیشتر میتوانند آنها را متفاوت کنند، پس رابطی را برگزینید که پروتکل سیمی واقعی پروکسی را حمل میکند. پروکسی HTTPS یک مرحله TLS دیگر میافزاید و بیرون از این دنباله CONNECT متنی است.