Asio TLS လက်ဆွဲနှုတ်ဆက်မှု မစတင်မီ CONNECT တည်ဆောက်ပါ
သာမန် HTTP ပရောက်စီ ဖလှယ်မှုအတွက် Asio SSL stream ၏ နောက်လွှာကို အသုံးပြုပြီး လက်ခံထားသော tunnel မှတစ်ဆင့် TLS ကို စတင်ပါ။
သာမန် HTTP ပရောက်စီမှတစ်ဆင့် ssl::stream<tcp::socket> အတွက် ဦးတည်ရာသို့ TLS မလုပ်ခိုင်းမီ ၎င်း၏ အကြမ်းထည် သယ်ယူမှုကို အသုံးပြုပါ:
auto& transport = tlsStream.next_layer();- ထို သယ်ယူမှုကို ပရောက်စီ host နှင့် port သို့ ချိတ်ဆက်ပါ။ ပရောက်စီ အထောက်အထား မသတ်မှတ်ထားသော ခွင့်ပြုထားသည့် အများသူငှာ HTTPS ဦးတည်ရာအတွက် HTTP ပရောက်စီ စာရင်း သည် ကိုယ်စားလှယ်လောင်း endpoint များကို ပေးသည်; ကိုယ်စားလှယ်လောင်းသည် တောင်းဆိုထားသော tunnel ကို ခွင့်ပြုကြောင်း စစ်ဆေးပါ။
- ဦးတည်ရာ၏ authority ကို အမည်ပေး၍ CONNECT ပို့ပါ၊ ဥပမာ
api.example:443၊ ထို့အပြင် အကြမ်းထည် သယ်ယူမှုပေါ်တွင် ပြည့်စုံသော တုံ့ပြန်မှု header များကို ခွဲခြမ်းစိတ်ဖြာပါ။ အောင်မြင်သော 2xx သည် tunnel ကို ဖွင့်သည်; ငြင်းပယ်မှုသည် HTTP ပရောက်စီ တုံ့ပြန်မှုအဖြစ် ကျန်ရှိသည်။ - ဦးတည်ရာ၏ host အမည်၊ လိုအပ်သော SNI၊ ယုံကြည်ရာ အမြစ်များနှင့် peer အတည်ပြုချက်ကို ပြင်ဆင်ပြီး
tlsStreamတွင် client လက်ဆွဲနှုတ်ဆက်မှုကို စတင်ပါ။ - TLS အောင်မြင်ပြီးနောက် အပလီကေးရှင်းအတွက် SSL stream ဖတ်ခြင်းနှင့် ရေးခြင်းကို အသုံးပြုပါ။ ထိုအချိန်တွင် နောက်လွှာကို တိုက်ရိုက်ဖတ်ခြင်းသည် TLS လုပ်ဆောင်မှုကို ကျော်သွားသည်။
HTTP parser ၏ ပိုလျှံမှုကို နောက်အဆင့်သို့ သယ်ဆောင်ပါ။ Asio တွင် buffer လုပ်ထားသော လက်ဆွဲနှုတ်ဆက်မှု overload များရှိသည်; parser ပိုင်ဆိုင်သော အမြီးကို ပစ်ပယ်ပါက socket မှ ဖတ်ပြီးသား byte များ ဆုံးရှုံးနိုင်သည်။
ဤရိုးရှင်းသော အမျိုးအစားဖြင့် next_layer နှင့် lowest_layer နှစ်ခုလုံး TCP သို့ ရောက်သည်။ wrapper ပိုများလာပါက ၎င်းတို့ကို ကွဲပြားစေနိုင်သည်၊ ထို့ကြောင့် ပရောက်စီ၏ အမှန်တကယ် wire protocol ကို သယ်ဆောင်သော interface ကို ရွေးပါ။ HTTPS ပရောက်စီသည် နောက်ထပ် TLS အဆင့်တစ်ခုကို ထည့်ပြီး ဤ plaintext CONNECT အစီအစဉ်၏ အပြင်ဘက်တွင် ရှိသည်။