Configure o stunnel para encapsular SSL para um único aplicativo

Configure o stunnel para encapsular SSL para um único aplicativo

estou tentando usartúnelpara obter um cliente Usenet mais antigo para suportar 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?

Responder1

Defina client = yesna [myservice]seção. Isso diz ao stunnel que o connectlado (também conhecido como "servidor") é o SSL e o acceptlado (também conhecido como "cliente") é simples. O padrão é o oposto, que requer um certificado SSL.

Mas isso não é tudo! Por alguma razão insana, o padrão do stunnel é o modo completamente inseguro que não verifica os 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 = 2e CAfile. No Ubuntu, CAfilepode ser encontrado em /etc/ssl/certs/ca-certificates.crt(do ca-certificatespacote). Enquanto você está nisso, defina também options = NO_SSLv2para desabilitar o protocolo SSLv2 inseguro.

Por fim, ao configurar seu programa Usenet, desative o SSL, pois a conexão entre o aplicativo e o stunnel NÃO utiliza SSL.

Escrevi o seguinte script wrapper para ajudar com isso. Substitua <LOCAL_PORT>, <REMOTE_HOST>e <REMOTE_PORT>conforme apropriado e substitua # ...por qualquer 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")

informação relacionada