За ssl::stream<tcp::socket> кроз обичан HTTP прокси најпре користите његов сирови транспорт, а затим му поверите TLS ка циљу:

auto& transport = tlsStream.next_layer();
  1. Повежите тај транспорт са хостом и портом проксија. Када је дозвољени јавни HTTPS циљ без подешених акредитива проксија, листа HTTP проксија нуди кандидате; проверите да ли изабрани кандидат дозвољава тражени тунел.
  2. Пошаљите CONNECT са authority вредношћу циља, на пример api.example:443, и рашчланите комплетне заглавља одговора на обичном транспорту. Успешан 2xx отвара тунел; одбијање остаје одговор HTTP проксија.
  3. Подесите име циљног хоста, потребни SNI, корене поверења и проверу peer-а, затим покрените руковање клијента на tlsStream.
  4. Када TLS успе, за апликацију користите читање и писање кроз SSL ток. Директно читање нижег слоја у том тренутку заобилази TLS обраду.

Пренесите евентуални вишак HTTP парсера у следећу фазу. Asio има преоптерећења руковања са бафером; одбацивање репа који поседује парсер може изгубити бајтове већ прочитане из сокета.

Код овог једноставног типа и next_layer и lowest_layer стижу до TCP. Више омотача их може раздвојити, зато изаберите интерфејс који носи стварни жичани протокол проксија. HTTPS прокси додаје још једну TLS фазу и није део овог CONNECT низа у чистом тексту.

Повезани чланци