បង្កើត CONNECT មុនពេលចាប់ផ្តើម Asio TLS handshake
ប្រើស្រទាប់បន្ទាប់នៃ Asio SSL stream សម្រាប់ការផ្លាស់ប្តូរ HTTP ធម្មតាតាម proxy បន្ទាប់មកចាប់ផ្តើម TLS តាម tunnel ដែលបានទទួលយក។
សម្រាប់ ssl::stream<tcp::socket> តាមរយៈ HTTP proxy ធម្មតា សូមប្រើ transport ដើមរបស់វា មុនពេលស្នើសុំវាធ្វើ TLS ទៅកាន់គោលដៅ៖
auto& transport = tlsStream.next_layer();- ភ្ជាប់ transport នោះទៅ host និង port របស់ proxy។ សម្រាប់គោលដៅ HTTPS សាធារណៈដែលបានអនុញ្ញាត ដោយគ្មានព័ត៌មានសម្គាល់ proxy ត្រូវបានកំណត់ បញ្ជី proxy HTTP ផ្តល់ចំណុចបញ្ចប់បេក្ខជន; ពិនិត្យថាបេក្ខជនអនុញ្ញាត tunnel ដែលបានស្នើ។
- ផ្ញើ CONNECT ដោយបញ្ជាក់ authority របស់គោលដៅ ដូចជា
api.example:443ហើយ វិភាគ headers ឆ្លើយតបពេញលេញនៅលើ transport ដើម។ 2xx ជោគជ័យបើក tunnel; ការបដិសេធនៅតែជាការឆ្លើយតបរបស់ HTTP proxy។ - កំណត់ឈ្មោះ host របស់គោលដៅ SNI ដែលត្រូវការ ឫសទុកចិត្ត និងការផ្ទៀងផ្ទាត់សមភាគី បន្ទាប់មកចាប់ផ្តើម handshake របស់ client នៅលើ
tlsStream។ - បន្ទាប់ពី TLS ជោគជ័យ សូមប្រើការអាន និងសរសេរ SSL stream សម្រាប់កម្មវិធី។ ការអានស្រទាប់បន្ទាប់ដោយផ្ទាល់នៅពេលនោះ រំលងដំណើរការ TLS។
យកអ្វីដែលនៅសល់ពី HTTP parser ទៅដំណាក់កាលបន្ទាប់។ Asio មាន overload នៃ handshake ដែលមាន buffer; ការបោះបង់កន្ទុយដែលជាកម្មសិទ្ធិរបស់ parser អាចបាត់បង់ bytes ដែលបានអានពី socket រួចហើយ។
ជាមួយប្រភេទសាមញ្ញនេះ next_layer និង lowest_layer ទាំងពីរឈានដល់ TCP។ wrapper បន្ថែមអាចធ្វើឱ្យពួកវាខុសគ្នា ដូច្នេះជ្រើសរើស interface ដែលផ្ទុក wire protocol ពិតប្រាកដរបស់ proxy។ HTTPS proxy បន្ថែមដំណាក់កាល TLS មួយទៀត ហើយស្ថិតនៅក្រៅលំដាប់ CONNECT អត្ថបទធម្មតានេះ។