Defina client = yes
na seção [myservice]
. Isso diz ao stunnel que o lado connect
(também conhecido como "servidor") é o SSL eo lado accept
(também conhecido como "cliente") é simples. O padrão é o oposto, o que requer um certificado SSL.
Mas isso não é tudo! Por alguma razão insana, o Stunnel usa como padrão o modo completamente inseguro, que não faz nenhuma verificação dos certificados do servidor, o que significa que você estaria sujeito a ataques man-in-the-middle (MitM)! Para corrigir isso, use as opções verify = 2
e CAfile
. No Ubuntu, o CAfile
pode ser encontrado em /etc/ssl/certs/ca-certificates.crt
(do pacote ca-certificates
). Enquanto você está nisso, defina também options = NO_SSLv2
para desabilitar o protocolo inseguro SSLv2.
Por fim, ao configurar seu programa usenet, desabilite o SSL, pois a conexão entre o aplicativo e o stunnel NÃO usa SSL.
Eu escrevi o seguinte script wrapper para ajudar com isso. Substitua <LOCAL_PORT>
, <REMOTE_HOST>
e <REMOTE_PORT>
conforme apropriado e substitua # ...
pelo comando que você deseja executar.
#!/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")