Estou tentando definir uma conexão SSL comtúnel. Algum tipo de proxy SSL.
Objetivo final
Conecte apenas httpCLIENTEapenas para httpsSERVIDOR.
Meu plano é
- CLIENTE: altere o endpoint paraPROCURADOR
- PROXY: use stunnel para receber solicitações do CLIENTE e encaminhá-las para o SERVIDOR
stunnel.conf
cert = /etc/stunnel/stunnel.pem
foreground = yes
chroot = /var/run/stunnel
setuid = stunnel
setgid = stunnel
pid = /stunnel.pid
debug = 7
[my_route]
accept = 7121
connect = SERVER:443
;connect = SERVER:443/somedata
Teste 1
$openssl s_client -connect SERVER:443
New, TLSv1/SSLv3, Server public key is 2048 bit
Teste 2
openssl s_client -connect PROXY:7121
New, TLSv1/SSLv3, Server public key is 2048 bit
Resultado(conectando do CLIENTE ao SERVIDOR através de PROXY).
Service [my_route] accepted (FD=3) from 10.0.2.2:12345
Service [my_route] started
Service [my_route] accepted connection from 10.0.2.2:12345
SSL state (accept): before/accept initialization
SSL_accept: 1408F10B: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket
Local socket (FD=3) closed
Service [my_route] finished (0 left)
Questões
Por que o IP não corresponde ao SERVER? Por que está conectado ao 10.0.2.2?
Isso significa que estou me conectando a um servidor errado? Como isso pode acontecer?O que esse erro diz? Esse servidor remoto usa outra versão de SSL, não é?
Responder1
- Por que o IP não corresponde ao SERVER? Por que está conectado ao 10.0.2.2?
Como esse endereço IP não é o endereço doservidorestá se conectando, mas o endereço doclientemáquina da qual está recebendo (executando openssl s_client).
Isso significa que estou me conectando a um servidor errado? Como isso pode acontecer?
Não, não tem nada a ver com o servidor.
- O que esse erro diz? Esse servidor remoto usa outra versão de SSL, não é?
Isso significa que seu stunnel tenta falar SSL com o cliente (openssl s_client) que está se conectando. Eles não parecem concordar com a versão do protocolo SSL a ser usada.
No entanto, isso está totalmente errado. Na configuração que você deseja definir, o stunnel deve aguardar as conexões HTTP e encapsular essas conexões com HTTPS para o SERVER. Portanto, você não pode usar o openssl s_client para se conectar ao seu stunnel, pois o openssl s_client usaria SSL e o stunnel estaria aguardando por conexões não-SSL.
Para resolver isso, você precisará de uma linha extra client = yes
na sua configuração. Então, em vez de usar openssl s_client como cliente para seu stunnel, você deve usar telnet ( telnet server2 7121
) ou um programa capaz de comunicar HTTP com seu servidor (como um navegador da web ou similar, com uma URL começando como http://PROXY:7121/...
).
Além disso, é altamente recomendável usar endereços IP em seu arquivo de configuração (em vez de nomes de host textuais).
Algo assim deve funcionar para você:
[my_route]
client = yes
accept = 7121
connect = aaa.bbb.ccc.ddd:443
Responder2
Parece que esse problema exato foi resolvidonesta resposta sobre falha do servidor; a parte em negrito parece apropriada ao seu cenário:
O
stunnel
servidor possuioptions = NO_SSLv3
, mas o cliente está tentando se conectar usando SSLv3.Você precisa atualizar o cliente para suportar uma versão mais recente do SSL ou alterar a configuração do stunnel para aceitar o SSLv3.
Responder3
adicionar isso ao arquivo de configuração bastará.
sslversion = all
e você pode ter perdido outra coisa. você deve definir explicitamente "client = yes" ou o padrão é "no" .