Успоставите CONNECT пре покретања Asio TLS руковања
Користите нижи слој SSL тока Asio за размену са обичним HTTP проксијем, а затим покрените TLS кроз прихваћени тунел.
За ssl::stream<tcp::socket> кроз обичан HTTP прокси најпре користите његов сирови транспорт, а затим му поверите TLS ка циљу:
auto& transport = tlsStream.next_layer();
- Повежите тај транспорт са хостом и портом проксија. Када је дозвољени јавни HTTPS циљ без подешених акредитива проксија, листа HTTP проксија нуди кандидате; проверите да ли изабрани кандидат дозвољава тражени тунел.
- Пошаљите CONNECT са authority вредношћу циља, на пример
api.example:443, и рашчланите комплетне заглавља одговора на обичном транспорту. Успешан 2xx отвара тунел; одбијање остаје одговор HTTP проксија. - Подесите име циљног хоста, потребни SNI, корене поверења и проверу peer-а, затим покрените руковање клијента на
tlsStream. - Када TLS успе, за апликацију користите читање и писање кроз SSL ток. Директно читање нижег слоја у том тренутку заобилази TLS обраду.
Пренесите евентуални вишак HTTP парсера у следећу фазу. Asio има преоптерећења руковања са бафером; одбацивање репа који поседује парсер може изгубити бајтове већ прочитане из сокета.
Код овог једноставног типа и next_layer и lowest_layer стижу до TCP. Више омотача их може раздвојити, зато изаберите интерфејс који носи стварни жичани протокол проксија. HTTPS прокси додаје још једну TLS фазу и није део овог CONNECT низа у чистом тексту.