estoy tratando de usartúnelpara conseguir un cliente Usenet más antiguo que admita SSL. Probé la siguiente configuración:
[myservice]
accept = <LOCAL_PORT>
connect = <REMOTE_HOST>:<REMOTE_PORT>
pero stunnel siguió fallando con el error:
Section myservice: SSL server needs a certificate
¿Qué estoy haciendo mal?
Respuesta1
Establecer client = yes
en la [myservice]
sección. Esto le dice a stunnel que el connect
lado (también conocido como "servidor") es el lado SSL y el accept
lado (también conocido como "cliente") es simple. El valor predeterminado es lo contrario, que requiere un certificado SSL.
¡Pero eso no es todo! Por alguna extraña razón, stunnel utiliza de forma predeterminada un modo completamente inseguro que no verifica los certificados del servidor, lo que significa que estaría sujeto a ataques de intermediario (MitM). Para solucionar este problema, utilice las opciones verify = 2
y CAfile
. En Ubuntu, se CAfile
puede encontrar en /etc/ssl/certs/ca-certificates.crt
(desde el ca-certificates
paquete). Mientras lo hace, también configúrelo options = NO_SSLv2
para deshabilitar el protocolo SSLv2 inseguro.
Finalmente, cuando configures tu programa usenet, desactiva SSL, ya que la conexión entre la aplicación y stunnel NO utiliza SSL.
Escribí el siguiente script contenedor para ayudar con esto. Reemplace <LOCAL_PORT>
, <REMOTE_HOST>
y <REMOTE_PORT>
según corresponda, y reemplácelo # ...
con cualquier comando que desee ejecutar.
#!/bin/bash
PIDFILE=/tmp/stunnel-agent.pid
# Start stunnel in the background.
cat << EOF | stunnel4 -fd 0
pid = $PIDFILE
# Enable proper SSL security. Without this, you are completely insecure!
verify = 2
CAfile = /etc/ssl/certs/ca-certificates.crt
options = NO_SSLv2
[myservice]
client = yes
accept = <LOCAL_PORT>
connect = <REMOTE_HOST>:<REMOTE_PORT>
EOF
# Start whatever program you want.
# ...
# Kill stunnel.
kill $(cat "$PIDFILE")