Establiu CONNECT abans d'iniciar l'apretada de mans TLS d'Asio
Utilitzeu la capa següent d'un flux SSL d'Asio per a l'intercanvi HTTP pla a través del proxy i, després, inicieu TLS pel túnel acceptat.
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();- 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.
- 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. - 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. - 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.