Un proxy HTTP può leggere e instradare le richieste HTTP in chiaro. E il traffico HTTPS cifrato? Se il proxy non può leggere il contenuto, come lo instrada? La risposta è il metodo CONNECT : il modo standard per dire al proxy "apri un tunnel TCP grezzo verso questo indirizzo e poi non intrometterti".
Come viene creato il tunnel?
Dopo la risposta 200 il proxy diventa un "tubo": trasferisce i byte in arrivo così come sono alla controparte, senza mai guardare il contenuto.
La risposta al CONNECT 200 Connection established nel momento in cui arriva, il proxy smette di parlare HTTP. I byte successivi sono l'handshake TLS e il proxy non può interpretarli — li trasporta soltanto.
Che cosa vede il proxy in un tunnel CONNECT?
Quindi l'HTTPS nasconde che cosa fai ma non nasconde dove vai . Questa distinzione è di importanza cruciale quando si valuta la privacy di un proxy.
Il tema delle fughe di metadati e dei log nel nostro articolo sui file di log lo abbiamo trattato in dettaglio.
Differenza tra CONNECT e absolute-URI
Nell'HTTP in chiaro al proxy viene inviata una forma di richiesta diversa. Le due non vanno confuse:
| HTTP in chiaro (absolute-URI) | HTTPS (CONNECT) | |
|---|---|---|
| Riga di richiesta | GET http://site/yol HTTP/1.1 | CONNECT site:443 HTTP/1.1 |
| Il proxy vede il contenuto | Sì, completamente | No |
| Può aggiungere intestazioni | Sì | No |
| Può metterlo in cache | Sì | No |
| Per ogni richiesta | Nuova riga di richiesta | Un solo tunnel, molte richieste |
Per questo intestazioni come X-Forwarded-For possono essere aggiunte solo nel traffico HTTP in chiaro; in HTTPS il proxy non può toccare le intestazioni.
Perché CONNECT viene limitato?
CONNECT è l'autorizzazione a dire al proxy "apri una connessione TCP grezza verso un indirizzo qualsiasi". Se non viene limitato, il proxy diventa un open relay. Per questo la maggior parte delle configurazioni proxy limita CONNECT consentendolo solo su determinate porte:
Il blocco delle porte SMTP serve a prevenire l'abuso a fini di spam. Se devi far transitare traffico e-mail, devi chiedere un'autorizzazione specifica al tuo provider.
Errori più frequenti
L'errore che vedi nel browser ERR_TUNNEL_CONNECTION_FAILEDsignifica che la richiesta CONNECT ha ricevuto una risposta diversa da 200. Per vedere i dettagli, prova con curl.
Analisi da riga di comando
L'ultimo comando mostra quanto sia semplice il protocollo: basta inviare poche righe di testo e ricevere una risposta 200.
Intercettazione TLS (SSL Inspection)
Alcuni proxy aziendali, invece di creare il tunnel, si frappongono: si connettono loro stessi alla destinazione e presentano al client un certificato falso firmato con la CA radice dell'azienda. In questo caso il proxy può leggere anche il contenuto cifrato.
Nel browser fai clic sull'icona del lucchetto e guarda l'ente che ha emesso il certificato. Se al posto dell'autorità di certificazione pubblica attesa compare il nome dell'azienda, è in atto un'intercettazione TLS. L'argomento nel nostro articolo sul proxy trasparente lo abbiamo trattato in dettaglio.
Nota sulle prestazioni: riutilizzo del tunnel
Una volta creato un tunnel CONNECT, più richieste verso la stessa destinazione possono passare dallo stesso tunnel. Questo significa pagare il costo dell'handshake una sola volta. Tenere attivo il keep-alive nel client porta un guadagno di velocità evidente nel traffico basato su CONNECT.
La prima richiesta è costosa, le successive sono economiche. Un client che apre una nuova connessione a ogni richiesta paga continuamente questa differenza.
Riepilogo
CONNECT è un meccanismo semplice ma potente che consente a un proxy HTTP di trasportare traffico cifrato. Una volta creato il tunnel, il proxy non vede il contenuto; conosce soltanto il nome di dominio di destinazione, l'orario e la quantità di byte. Le politiche sulle porte limitano CONNECT per prevenire gli abusi. Per le prestazioni è fondamentale riutilizzare il tunnel. Per verificare la tua configurazione il nostro strumento di controllo proxy puoi usarlo.