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 = yes
na [myservice]
seção. Isso diz ao stunnel que o connect
lado (também conhecido como "servidor") é o SSL e o accept
lado (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 = 2
e CAfile
. No Ubuntu, CAfile
pode ser encontrado em /etc/ssl/certs/ca-certificates.crt
(do ca-certificates
pacote). Enquanto você está nisso, defina também options = NO_SSLv2
para 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")