ສ້າງ 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 ສະເໜີ endpoint ຜູ້ສະໝັກ; ກວດສອບວ່າຜູ້ສະໝັກອະນຸຍາດ tunnel ທີ່ຮ້ອງຂໍ.
- ສົ່ງ CONNECT ໂດຍລະບຸ authority ຂອງປາຍທາງ, ເຊັ່ນ
api.example:443, ແລະ ວິເຄາະ header ຕອບສະໜອງທັງໝົດເທິງ transport ດິບ. 2xx ທີ່ສຳເລັດເປີດ tunnel; ການປະຕິເສດຍັງເປັນການຕອບສະໜອງຂອງ HTTP proxy. - ຕັ້ງຄ່າຊື່ host ຂອງປາຍທາງ, SNI ທີ່ຕ້ອງການ, ຮາກຄວາມໄວ້ໃຈ ແລະ ການກວດສອບ peer, ແລ້ວເລີ່ມ handshake ຂອງ client ເທິງ
tlsStream. - ຫຼັງຈາກ TLS ສຳເລັດ, ໃຊ້ການອ່ານ ແລະ ຂຽນ SSL stream ສຳລັບແອັບພລິເຄຊັນ. ການອ່ານຊັ້ນຕໍ່ໄປໂດຍກົງໃນຈຸດນັ້ນຂ້າມການປະມວນຜົນ TLS.
ນຳເອົາສ່ວນເກີນຂອງ HTTP parser ໄປສູ່ຂັ້ນຕອນຕໍ່ໄປ. Asio ມີ overload ຂອງ handshake ທີ່ມີ buffer; ການຖິ້ມຫາງທີ່ parser ເປັນເຈົ້າຂອງອາດເຮັດໃຫ້ໄບຕ໌ທີ່ອ່ານຈາກ socket ແລ້ວຫາຍໄປ.
ກັບປະເພດງ່າຍໆນີ້, next_layer ແລະ lowest_layer ທັງສອງຮອດ TCP. wrapper ເພີ່ມເຕີມອາດເຮັດໃຫ້ພວກມັນຕ່າງກັນ, ດັ່ງນັ້ນເລືອກ interface ທີ່ບັນຈຸ wire protocol ຕົວຈິງຂອງ proxy. HTTPS proxy ເພີ່ມຂັ້ນ TLS ອີກອັນໜຶ່ງ ແລະ ຢູ່ນອກລຳດັບ CONNECT ແບບ plaintext ນີ້.