Para ssl::stream<tcp::socket> a través dun proxy HTTP normal, use o seu transporte en bruto antes de pedirlle que faga TLS cara ao destino:

auto& transport = tlsStream.next_layer();
  1. Conecte ese transporte ao host e ao porto do proxy. Para un destino HTTPS público permitido sen credenciais de proxy configuradas, a lista de proxies HTTP ofrece extremos candidatos; comprobe que o candidato permite o túnel solicitado.
  2. Envie CONNECT indicando a autoridade do destino, como api.example:443, e analice as cabeceiras completas da resposta no transporte en bruto. Un 2xx correcto abre o túnel; unha negativa segue sendo unha resposta do proxy HTTP.
  3. Configure o nome de host do destino, o SNI requirido, as raíces de confianza e a verificación do par, e logo inicie o handshake do cliente en tlsStream.
  4. Cando TLS teña éxito, use lecturas e escrituras do fluxo SSL para a aplicación. Ler a capa seguinte directamente nese momento evita o procesamento TLS.

Leve calquera excedente do analizador HTTP á etapa seguinte. Asio ten sobrecargas de handshake con búfer; descartar unha cola propiedade do analizador pode perder bytes xa lidos do socket.

Con este tipo sinxelo, next_layer e lowest_layer chegan ambos a TCP. Máis envoltorios poden facelos distintos, así que escolla a interface que leva o protocolo de cable real do proxy. Un proxy HTTPS engade outra etapa TLS e queda fóra desta secuencia CONNECT en texto claro.

Artigos relacionados