Sıradan bir HTTP proxy üzerinden ssl::stream<tcp::socket> için önce ham taşıma katmanını kullanın, ancak ondan sonra hedefe TLS yaptırın:

auto& transport = tlsStream.next_layer();
  1. Bu taşıma katmanını proxy ana bilgisayarına ve bağlantı noktasına bağlayın. İzin verilen bir genel HTTPS hedefi için proxy kimlik bilgileri tanımlı değilse, HTTP proxy listesi aday uç noktalar sunar; adayın istenen tünele izin verdiğini doğrulayın.
  2. Hedef authority'sini belirten CONNECT gönderin, örneğin api.example:443, ve yanıt başlıklarının tamamını düz taşıma katmanında ayrıştırın. Başarılı bir 2xx tüneli açar; ret ise HTTP proxy yanıtı olarak kalır.
  3. Hedef ana bilgisayar adını, gereken SNI'yi, güven köklerini ve eş doğrulamasını yapılandırın, ardından istemci el sıkışmasını tlsStream üzerinde başlatın.
  4. TLS başarılı olduktan sonra uygulama için SSL akışı üzerinden okuma ve yazma kullanın. O noktada alt katmanı doğrudan okumak TLS işlemesini atlar.

HTTP ayrıştırıcısının artan verisini bir sonraki aşamaya taşıyın. Asio'da tamponlu el sıkışma aşırı yüklemeleri vardır; ayrıştırıcının sahip olduğu kuyruğu atmak, soketten zaten okunmuş baytları kaybedebilir.

Bu basit türde next_layer ve lowest_layer ikisi de TCP'ye ulaşır. Daha fazla sarmalayıcı bunları farklı kılabilir, bu yüzden proxy'nin gerçek tel protokolünü taşıyan arayüzü seçin. Bir HTTPS proxy başka bir TLS aşaması ekler ve bu düz metin CONNECT dizisinin dışındadır.

İlgili makaleler