Se si esegue HTTP alla porta del server di un'istanza stunnel:
client <--- TCP ---> stunnel <--- TCP ---> server
<--- TLS --->
<------------- HTTP -------------->
sarà quasi esattamente come utilizzare HTTPS, ma non completamente perché il client vede ancora se stesso come se utilizzasse HTTP su TCP. Ad esempio, un browser non visualizzerà "Sicuro" nella barra degli indirizzi e il codice Javascript in esecuzione nel browser potrebbe rifiutarsi di fare le cose se la connessione non è HTTPS.
Per il resto della tua domanda, devi capire esattamente cosa sta succedendo con il "firewall" o il "proxy" che stai usando; ci sono un certo numero di tecniche diverse che può essere utilizzato per gestire la connessione che consentirà o impedirà determinate tecniche quando lo si utilizza.
1. Connessione TCP diretta
Se stai effettuando una connessione TCP che termina sull'host remoto (diagramma sopra), anche se è stato modificato in qualche modo (ad esempio, gli indirizzi modificati tramite NAT) e hai impostato una connessione TLS su quella connessione TCP, i router intermedi non saranno in grado di vedere nessuno del traffico oltre la quantità di esso, gli indirizzi IP e le porte TCP e il fatto che sia TLS. Un firewall a livello IP può essere configurato per disabilitare le connessioni a porte diverse da 443 o eliminare connessioni a 443 se vede che non sono TLS. Potrebbe anche connettersi prima alla porta stessa per vedere se il server sembra eseguire HTTP / TLS su quella porta.
2. Proxy HTTP CONNECT
Se stai utilizzando un proxy HTTP utilizzando il verbo CONNECT , come Proxytunnel , ci sono due connessioni TCP coinvolte ma si fa una connessione TLS su di loro:
client <---- TCP 1 ----> proxy <---- TCP 2 ----> server
CONNECT
<------------------ TLS ---------------->
Stai ancora negoziando TLS con il server reale dall'altra parte e la situazione è praticamente la stessa del numero 1 sopra. Non è necessario eseguire TLS tramite le connessioni TCP, in realtà; potresti semplicemente CONNECT server.mydom.com:22
e iniziare a parlare di SSH su quella connessione se il proxy non rifiuta quella richiesta. Alcune persone hanno server SSH in ascolto sulla porta 443 esattamente per questo scopo. Se il proxy è abbastanza sofisticato da controllare il protocollo in uso, potrebbe disconnetterti se vede che non hai eseguito una configurazione TLS standard, anche se una volta che TLS è attivo non può vedere esattamente cosa sta succedendo in quella connessione .
3. MITM
Alcune organizzazioni effettuano attacchi man-in-the-middle sulle connessioni HTTPS (a volte più educatamente chiamate "intercettazione SSL"). Quando tenti di connetterti al server remoto, tramite una connessione TCP diretta o un proxy come in uno dei casi precedenti, un dispositivo di rete fa finta che sia il server remoto.
client <---- TCP 1 ----> MITM <---- TCP 2 ----> server
<---- TLS 1 ----> <---- TLS 2 ---->
<---------------- HTTP ---------------->
Il tuo browser web tenta di eseguire l'installazione TLS, controllando il certificato e lo convaliderà non perché è il vero certificato, ma perché il dispositivo ha generato un certificato con firma di una CA privata (autorità di certificazione) e il reparto IT ha anche modificato elenco di certificati nel browser o nel sistema operativo per considerare attendibile tale CA. (Si può spesso dire che questo sta accadendo provando la stessa connessione con un altro programma che usa una lista di certificati diversa senza quel certificato, come Firefox se lo si scarica in modo indipendente.) Si dispone di una connessione sicura al dispositivo MITM, ma sta decodificando tutto e ricodificandolo per un'altra connessione sicura separata al server quando inoltra i dati.
In questo caso, anche se pensi di parlare con il server remoto, in realtà stai parlando in modo sicuro solo con il proxy che ha accesso completo a tutti i dati sulla connessione e può vederlo e modificarlo a suo piacimento.