Sirva todo el contenido a través de HTTPS, independientemente de la configuración del servidor web

1

Tengo un servidor ejecutándose en el puerto 80 en una Mac.

También me gustaría tener el mismo contenido que se sirve en el puerto 80 disponible en el puerto 443.

Me gustaría saber si hay una línea de comando o una herramienta fácil de usar que me permita tomar cualquier puerto que no sea SSL, encriptarlo y servirlo en un puerto encriptado SSL, independientemente del servidor que sirve contenido en el puerto 80 .

EDITAR: No tengo control sobre la configuración del servidor para lo que sirve contenido en el puerto 80. Pero me gustaría ver el mismo contenido en el puerto 443. ¿Cómo puedo hacer esto?

Sospecho que esto se puede hacer con SSH de alguna manera (reenvío de puertos locales), pero no he podido encontrar nada que parezca funcionar. Estoy abierto a usar cualquier herramienta de código abierto para hacer esto ... Apache, ssh, iptables ... ¡lo que funcione!

Brad Parks
fuente
Tenga en cuenta que SSL, TLS y HTTPS no tienen nada que ver con SSH.
Bruno
No hice mucho reenvío de puertos, pero por SSH en esta pregunta quise decir "en el servidor, use SSH para reenviar un puerto local desde el puerto 80 al puerto 443". Por lo tanto, el mismo contenido estaría disponible en ambos puertos. Pensé que esta parte sería posible, pero hacer que se encripte correctamente era la parte de la que no estaba seguro. ¡Gracias por la respuesta!
Brad Parks
El uso de SSH para reenviar el puerto 80 sobre el puerto 443 no hará que use SSL / TLS o HTTPS. SSH es un protocolo completamente diferente de SSL / TLS, y HTTPS es HTTP sobre SSL / TLS. Señalar su navegador a través https://del puerto 443 en algo que escucha SSH allí simplemente no funcionará. (El hecho de que OpenSSH se base en OpenSSL no significa que SSH se base en SSL, es solo que OpenSSL es una biblioteca de criptografía que hace mucho más que SSL / TLS.)
Bruno
sí, entiendo eso ... por eso escribí "hacer que se encripte correctamente fue la parte de la que no estaba seguro". Gracias por tu respuesta detallada. ¡Estoy seguro de que agregará algo de valor a la pregunta!
Brad Parks

Respuestas:

3

Podría hacer algo frente al servidor que se traduzca de SSL a TCP, por ejemplo, stunnel o software similar.

Steffen Ullrich
fuente
¡Sí! Esto funcionó ... Gracias ... Instalé stunnel usando "brew install stunnel", luego usé este repositorio de git para algunos scripts de muestra para usar stunnel ( github.com/mostlygeek/stunnel-ssl-proxy ). Luego edité stunnel.cnf y cambié mis puertos a "accept = 443" y "connect = 80". Luego, para iniciar el servidor, ejecute "sudo ./start-server.sh"
Brad Parks
1

Esto se maneja en el lado del servidor, no a través del reenvío de puertos. Solo necesita habilitar SSL, que luego le permitirá obtener contenido a través de HTTPS en el puerto 443.

Instrucciones sobre cómo hacerlo para Apache:

http://httpd.apache.org/docs/current/ssl/ssl_howto.html

ernie
fuente
¡Oye! gracias por los comentarios ... pero me pregunto si de todos modos hay que hacerlo, independientemente de qué servidor se esté utilizando ... Entonces, de alguna manera, el servidor no encriptará el tráfico del puerto 80 al puerto 443 ... Esto todavía estaría activado el mismo servidor, pero no configurado por servidor. Entonces, por ejemplo, si cambiara el backend a Lighttpd, aún funcionaría y el contenido seguiría en el servidor en 443 sin que tuviera que descubrir cómo hacerlo para Lighttpd.
Brad Parks
1
No . . . La decisión de qué servir se maneja en el lado del servidor. Si su servidor no está sirviendo HTTPS, entonces el cliente no puede obtener contenido HTTPS. . .
ernie
Podría ejecutar el programa en la misma máquina ... que sería manejado por el servidor ... por otro servidor (por ejemplo, nginx o apache)
Brad Parks
0

Esto también se puede hacer usando Apache y proxy proxy ... Logré hacerlo usando XAMPP, y el httpd.conf predeterminado que viene con XAMPP al incluir lo siguiente en la parte inferior de su archivo "etc / httpd.conf"

ServerName localhost

ProxyPass / balancer://mycluster/ stickysession=JSESSIONID|jsessionid

<Proxy balancer://mycluster>
   BalancerMember http://localhost route=myroute
</Proxy>

SSLHonorCipherOrder On
SSLProtocol -ALL +SSLv3 +TLSv1
SSLCipherSuite RC4-SHA:HIGH:!ADH

y comentando las últimas 2 líneas de ese archivo, las que

  # Include etc/extra/httpd-xampp.conf
  # Include "/Applications/XAMPP/xamppfiles/apache2/conf/httpd.conf"

y cambiando el puerto predeterminado que apache estaba sirviendo de 80 a otra cosa (por ejemplo, 800)

Listen 800

Estoy seguro de que probablemente se pueda hacer con menos configuración que esta, pero esto funcionó para mí ;-)

Nota: Opcionalmente, si desea hacerlo de modo que todas las solicitudes http se reescriban a https (y no hizo la línea Listen 800 anterior), puede hacer lo siguiente usando mod rewrite:

  # Rewrite all http requests to https
  RewriteEngine On
  RewriteCond %{HTTPS} off
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Brad Parks
fuente