Si realiza HTTP al puerto del servidor de una instancia de stunnel:
client <--- TCP ---> stunnel <--- TCP ---> server
<--- TLS --->
<------------- HTTP -------------->
será casi exactamente como usar HTTPS, pero no completamente porque el cliente todavía se ve a sí mismo como usando HTTP sobre TCP. Por ejemplo, un navegador no mostrará "Seguro" en la barra de URL, y el código Javascript que se ejecuta en el navegador podría negarse a hacer cosas si la conexión no es HTTPS.
Para el resto de su pregunta, necesita averiguar exactamente qué está pasando con el "firewall" o el "proxy" que está usando; hay varias técnicas diferentes que puede usar para manejar la conexión que le permitirán o evitarán ciertas técnicas cuando la use.
1. Conexión TCP directa
Si está realizando una conexión TCP que termina en el host remoto (diagrama anterior), incluso si se modifica de alguna manera (por ejemplo, las direcciones se modificaron a través de NAT), y configura una conexión TLS en esa conexión TCP, Los enrutadores intermedios no podrán ver el tráfico más allá de su cantidad, las direcciones IP y los puertos TCP, y el hecho de que es TLS. Un servidor de seguridad de nivel IP podría configurarse para no permitir conexiones a puertos distintos de 443 o abandonar las conexiones a 443 si ve que no son TLS. Incluso podría conectarse primero al puerto en sí para ver si el servidor parece estar ejecutando HTTP / TLS en ese puerto.
2. Proxy HTTP CONNECT
Si vas a usar un proxy HTTP utilizando el verbo CONNECT , como Proxytunnel hace, hay dos conexiones TCP involucradas pero usted hace una conexión TLS sobre ellas:
client <---- TCP 1 ----> proxy <---- TCP 2 ----> server
CONNECT
<------------------ TLS ---------------->
Todavía está negociando TLS con el servidor real en el otro extremo, y la situación es bastante parecida a la del # 1 anterior. No es necesario hacer TLS a través de las conexiones TCP, en realidad; simplemente podría CONNECT server.mydom.com:22
y comenzar a hablar SSH a través de esa conexión si el proxy no rechaza esa solicitud. Algunas personas tienen servidores SSH que escuchan en el puerto 443 exactamente para este propósito. Sin embargo, si el proxy es lo suficientemente sofisticado como para verificar el protocolo en uso, puede desconectarlo si ve que no realizó una configuración estándar de TLS, aunque una vez que se haya activado el TLS, no podrá ver exactamente qué sucede en esa conexión. .
3. MITM
Algunas organizaciones realizan ataques de intermediario en las conexiones HTTPS (a veces más educadamente llamadas "intercepción SSL"). Cuando intenta conectarse al servidor remoto, ya sea a través de una conexión TCP directa o un proxy como en cualquiera de los casos anteriores, un dispositivo de red simula que es el servidor remoto.
client <---- TCP 1 ----> MITM <---- TCP 2 ----> server
<---- TLS 1 ----> <---- TLS 2 ---->
<---------------- HTTP ---------------->
Su navegador web intenta la configuración TLS, verifica el certificado y lo validará no porque sea el certificado real, sino porque el dispositivo generó un certificado firmado por una CA privada (autoridad de certificación) y el departamento de TI también modificó Cert lista en el navegador o sistema operativo para confiar en ese CA. (Con frecuencia, puede darse cuenta de que esto está sucediendo al intentar la misma conexión con otro programa que usa una lista de certificados diferente sin ese certificado, como Firefox si lo descarga de forma independiente). Tiene una conexión segura con el dispositivo MITM, pero lo está descifrando todo. y volver a cifrarlo para otra conexión segura separada al servidor cuando reenvía datos.
En este caso, aunque cree que está hablando con el servidor remoto, en realidad está hablando de manera segura solo con el proxy que tiene acceso completo a todos los datos de la conexión y puede verlo y modificarlo como desee.