შექმენით CONNECT Asio TLS ხელის ჩამორთმევის დაწყებამდე
გამოიყენეთ Asio SSL ნაკადის შემდეგი ფენა ჩვეულებრივი HTTP პროქსის გაცვლისთვის, შემდეგ დაიწყეთ TLS მიღებული გვირაბით.
ჩვეულებრივი HTTP პროქსის მეშვეობით ssl::stream<tcp::socket>-ისთვის გამოიყენეთ მისი ნედლი ტრანსპორტი, სანამ დანიშნულებისკენ 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 მიმდევრობის გარეთაა.