Proxy SSL con stunnel

Proxy SSL con stunnel

Estoy intentando establecer una conexión SSL contúnel. Algún tipo de proxy SSL.

Objetivo final
Conectar solo httpCLIENTEsolo a httpsSERVIDOR.

mi plan es

  1. CLIENTE: cambiar el punto final aAPODERADO
  2. PROXY: utilice stunnel para recibir solicitudes del CLIENTE y reenviarlas al SERVIDOR

stunnel.conf

cert = /etc/stunnel/stunnel.pem
foreground = yes
chroot = /var/run/stunnel
setuid = stunnel
setgid = stunnel
pid = /stunnel.pid
debug = 7
[my_route]
accept = 7121
connect = SERVER:443
;connect = SERVER:443/somedata

Prueba 1

$openssl s_client -connect SERVER:443
New, TLSv1/SSLv3, Server public key is 2048 bit

Prueba 2

openssl s_client -connect PROXY:7121
New, TLSv1/SSLv3, Server public key is 2048 bit

Resultado(conectando de CLIENTE a SERVIDOR a través de PROXY).

Service [my_route] accepted (FD=3) from 10.0.2.2:12345
Service [my_route] started
Service [my_route] accepted connection from 10.0.2.2:12345
SSL state (accept): before/accept initialization
SSL_accept: 1408F10B: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket
Local socket (FD=3) closed
Service [my_route] finished (0 left)

Preguntas

  1. ¿Por qué la IP no coincide con el SERVIDOR? ¿Por qué se conecta a 10.0.2.2?
    ¿Significa que me estoy conectando a un servidor equivocado? ¿Cómo puede suceder eso?

  2. ¿Qué dice este error? Ese servidor remoto usa otra versión de SSL, ¿no?

Respuesta1

  1. ¿Por qué la IP no coincide con el SERVIDOR? ¿Por qué se conecta a 10.0.2.2?

Porque esa dirección IP no es la dirección delservidorse está conectando, pero la dirección delclientemáquina desde la que recibe (ejecutando openssl s_client).

¿Significa que me estoy conectando a un servidor equivocado? ¿Cómo puede suceder eso?

No, no tiene nada que ver con el servidor.

  1. ¿Qué dice este error? Ese servidor remoto usa otra versión de SSL, ¿no?

Significa que su stunnel intenta hablar SSL con el cliente (openssl s_client) que se conecta. No parecen ponerse de acuerdo sobre la versión del protocolo SSL a utilizar.

Sin embargo, esto es totalmente erróneo. En la configuración que desea configurar, stunnel debe esperar las conexiones HTTP y canalizar esas conexiones con HTTPS al SERVIDOR. Por lo tanto, no puede usar openssl s_client para conectarse a su stunnel ya que openssl s_client usaría SSL y stunnel estaría esperando conexiones que no sean SSL.

Para resolver esto, necesitarás una línea adicional client = yesen tu configuración. Luego, en lugar de usar openssl s_client como cliente para su stunnel, debe usar telnet ( telnet server2 7121), o un programa capaz de transmitir HTTP a su servidor (como un navegador web, o similar, con una URL que comience como http://PROXY:7121/...).

Además, se recomienda encarecidamente utilizar direcciones IP en su archivo de configuración (en lugar de nombres de host textuales).

Algo como esto debería funcionar para ti:

[my_route]
client = yes
accept = 7121
connect = aaa.bbb.ccc.ddd:443

Respuesta2

Parece que este problema exacto está solucionado.en esta respuesta sobre Falla del Servidor; la parte en negrita parece apropiada para su escenario:

El stunnelservidor tiene options = NO_SSLv3, pero el cliente está intentando conectarse mediante SSLv3.Debe actualizar el cliente para que admita una versión más nueva de SSL o debe cambiar la configuración de Stunnel para aceptar SSLv3.

Respuesta3

agregar esto al archivo de configuración será suficiente.

sslversion = all

y es posible que te hayas perdido otra cosa. debe establecer explícitamente "cliente = sí" o el valor predeterminado es "no".

información relacionada