Per a ssl::stream<tcp::socket> a través d'un proxy HTTP ordinari, utilitzeu el seu transport cru abans de demanar-li que faci TLS cap a la destinació:

auto& transport = tlsStream.next_layer();
  1. Connecteu aquest transport a l'amfitrió i el port del proxy. Per a una destinació HTTPS pública permesa sense credencials de proxy configurades, la llista de proxys HTTP ofereix punts finals candidats; comproveu que el candidat permet el túnel sol·licitat.
  2. Envieu CONNECT amb l'authority de la destinació, com api.example:443, i analitzeu les capçaleres completes de la resposta al transport cru. Un 2xx correcte obre el túnel; una negativa continua sent una resposta del proxy HTTP.
  3. Configureu el nom d'amfitrió de la destinació, l'SNI necessari, les arrels de confiança i la verificació de l'homòleg, i després inicieu l'apretada de mans del client a tlsStream.
  4. Quan TLS hagi reeixit, feu servir lectures i escriptures del flux SSL per a l'aplicació. Llegir la capa següent directament en aquest moment s'alta el processament TLS.

Passeu qualsevol excés de l'analitzador HTTP a la fase següent. Asio té sobrecàrregues d'apretada de mans amb memòria intermèdia; descartar una cua propietat de l'analitzador pot perdre bytes ja llegits del sòcol.

Amb aquest tipus simple, next_layer i lowest_layer arriben tots dos a TCP. Més embolcalls els poden fer diferents, així que trieu la interfície que porta el protocol de fil real del proxy. Un proxy HTTPS afegeix una altra etapa TLS i queda fora d'aquesta seqüència CONNECT en text pla.

Articles relacionats