Estableza CONNECT antes de iniciar o handshake TLS de Asio
Use a capa seguinte dun fluxo SSL de Asio para o intercambio HTTP simple a través do proxy e logo inicie TLS polo túnel aceptado.
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();- 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.
- 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. - 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. - 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.