برای ssl::stream<tcp::socket> از طریق یک پروکسی HTTP معمولی، پیش از آنکه از آن TLS به مقصد بخواهید، از انتقال خام آن استفاده کنید:

auto& transport = tlsStream.next_layer();
  1. آن انتقال را به میزبان و درگاه پروکسی وصل کنید. برای یک مقصد HTTPS عمومی مجاز بدون اعتبارنامه پروکسی تنظیم‌شده، فهرست پروکسی HTTP نقاط پایانی نامزد ارائه می‌دهد؛ بررسی کنید که نامزد تونل درخواستی را مجاز می‌داند.
  2. CONNECT را با نام authority مقصد بفرستید، مثلاً api.example:443، و سرصفحه‌های کامل پاسخ را روی انتقال خام تجزیه کنید. یک 2xx موفق تونل را باز می‌کند؛ رد شدن همچنان پاسخ پروکسی HTTP است.
  3. نام میزبان مقصد، SNI لازم، ریشه‌های اعتماد و تأیید همتا را پیکربندی کنید، سپس دست‌دهی سمت کلاینت را روی tlsStream آغاز کنید.
  4. پس از موفقیت TLS، برای برنامه از خواندن و نوشتن جریان SSL استفاده کنید. خواندن مستقیم لایه بعدی در آن لحظه پردازش TLS را دور می‌زند.

هر مازاد تجزیه‌گر HTTP را به مرحله بعد ببرید. Asio بارگذاری‌های اضافی دست‌دهی بافرشده دارد؛ دور انداختن دنباله‌ای که در اختیار تجزیه‌گر است می‌تواند بایت‌هایی را که پیش‌تر از سوکت خوانده شده از دست بدهد.

با این نوع ساده، next_layer و lowest_layer هر دو به TCP می‌رسند. پوشش‌های بیشتر می‌توانند آن‌ها را متفاوت کنند، پس رابطی را برگزینید که پروتکل سیمی واقعی پروکسی را حمل می‌کند. پروکسی HTTPS یک مرحله TLS دیگر می‌افزاید و بیرون از این دنباله CONNECT متنی است.

مقالات مرتبط