សម្រាប់ ssl::stream<tcp::socket> តាមរយៈ HTTP proxy ធម្មតា សូមប្រើ transport ដើមរបស់វា មុនពេលស្នើសុំវាធ្វើ TLS ទៅកាន់គោលដៅ៖

auto& transport = tlsStream.next_layer();
  1. ភ្ជាប់ transport នោះទៅ host និង port របស់ proxy។ សម្រាប់គោលដៅ HTTPS សាធារណៈដែលបានអនុញ្ញាត ដោយគ្មានព័ត៌មានសម្គាល់ proxy ត្រូវបានកំណត់ បញ្ជី proxy HTTP ផ្តល់ចំណុចបញ្ចប់បេក្ខជន; ពិនិត្យថាបេក្ខជនអនុញ្ញាត tunnel ដែលបានស្នើ។
  2. ផ្ញើ CONNECT ដោយបញ្ជាក់ authority របស់គោលដៅ ដូចជា api.example:443 ហើយ វិភាគ headers ឆ្លើយតបពេញលេញនៅលើ transport ដើម។ 2xx ជោគជ័យបើក tunnel; ការបដិសេធនៅតែជាការឆ្លើយតបរបស់ HTTP proxy។
  3. កំណត់ឈ្មោះ host របស់គោលដៅ SNI ដែលត្រូវការ ឫសទុកចិត្ត និងការផ្ទៀងផ្ទាត់សមភាគី បន្ទាប់មកចាប់ផ្តើម handshake របស់ client នៅលើ tlsStream។
  4. បន្ទាប់ពី 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 អត្ថបទធម្មតានេះ។

អត្ថបទពាក់ព័ន្ធ