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
- CLIENTE: cambiar el punto final aAPODERADO
- 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
¿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?¿Qué dice este error? Ese servidor remoto usa otra versión de SSL, ¿no?
Respuesta1
- ¿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.
- ¿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 = yes
en 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
stunnel
servidor tieneoptions = 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".