Configure o stunnel para envolver o SSL em um único aplicativo

3

Estou tentando usar o stunnel para que um cliente Usenet mais antigo ofereça suporte ao SSL. Eu tentei a seguinte configuração:

[myservice]
accept = <LOCAL_PORT>
connect = <REMOTE_HOST>:<REMOTE_PORT>

mas o stunnel continuou falhando com o erro:

Section myservice: SSL server needs a certificate

O que estou fazendo de errado?

    
por Mark Lodato 01.03.2015 / 20:17

1 resposta

3

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")
    
por 01.03.2015 / 20:17

Tags