Erro ao configurar o servidor stunnel: `SSL3_GET_CLIENT_HELLO: número de versão errado`

9

Estou configurando um stunnelservidor no Windows XP e recebo esse erro quando um cliente tenta acessar:

2013.02.14 00:02:16 LOG7[8848:7664]: Service [https] accepted (FD=320) from 107.20.36.147:56160
2013.02.14 00:02:16 LOG7[8848:7664]: Creating a new thread
2013.02.14 00:02:16 LOG7[8848:7664]: New thread created
2013.02.14 00:02:16 LOG7[8848:9792]: Service [https] started
2013.02.14 00:02:16 LOG5[8848:9792]: Service [https] accepted connection from 107.20.36.147:56160
2013.02.14 00:02:16 LOG7[8848:9792]: SSL state (accept): before/accept initialization
2013.02.14 00:02:16 LOG7[8848:9792]: SSL alert (write): fatal: handshake failure
2013.02.14 00:02:16 LOG3[8848:9792]: SSL_accept: 1408A10B: error:1408A10B:SSL routines:SSL3_GET_CLIENT_HELLO:wrong version number
2013.02.14 00:02:16 LOG5[8848:9792]: Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket
2013.02.14 00:02:16 LOG7[8848:9792]: Local socket (FD=320) closed
2013.02.14 00:02:16 LOG7[8848:9792]: Service [https] finished (0 left)

Alguma idéia do que fazer sobre isso? Li online que isso pode significar que meu servidor está anunciando que pode se comunicar em SSL3, mas na verdade não pode. Se isso for verdade, eu gostaria de saber como corrigir isso. Estou editando o stunnel.confarquivo, mas não tenho idéia do que alterar para corrigir isso.

ATUALIZAR:

A mensagem de erro acima é exibida apenas quando o cliente Twilio (servidor do Twilio) tenta acessar meu servidor. Quando tento acessar meu servidor com um dos meus computadores, a página é exibida, mas depois que o conteúdo é exibido, o Chrome mostra a página como "carregando" por cerca de 30 segundos, no final da stunnelmensagem:

transfer: s_poll_wait: TIMEOUTclose exceeded: closing

ATUALIZAR:

Aqui está a captura do wireshark: https://gist.github.com/cool-RR/4963477

Arquivo de limite : https://dl.dropbox.com/u/1927707/wireshark.cap

Observe que o servidor é executado na porta 8088.

ATUALIZAR:

Aqui está o log do servidor (com depuração = 7):

2013.02.17 17:06:52 LOG7[7636:2092]: No limit detected for the number of clients
2013.02.17 17:06:52 LOG5[7636:2092]: stunnel 4.54 on x86-pc-msvc-1500 platform
2013.02.17 17:06:52 LOG5[7636:2092]: Compiled/running with OpenSSL 1.0.1c-fips 10 May 2012
2013.02.17 17:06:52 LOG5[7636:2092]: Threading:WIN32 SSL:+ENGINE+OCSP+FIPS Auth:none Sockets:SELECT+IPv6
2013.02.17 17:06:52 LOG5[7636:2092]: Reading configuration from file stunnel.conf
2013.02.17 17:06:52 LOG5[7636:2092]: FIPS mode is enabled
2013.02.17 17:06:52 LOG7[7636:2092]: Compression not enabled
2013.02.17 17:06:52 LOG7[7636:2092]: Snagged 64 random bytes from C:\Documents and Settings\User/.rnd
2013.02.17 17:06:52 LOG7[7636:2092]: Wrote 1024 new random bytes to C:\Documents and Settings\User/.rnd
2013.02.17 17:06:52 LOG7[7636:2092]: PRNG seeded successfully
2013.02.17 17:06:52 LOG6[7636:2092]: Initializing service [https]
2013.02.17 17:06:52 LOG7[7636:2092]: Certificate: G:\Dropbox\StartSSL\SSL Cert.pem
2013.02.17 17:06:52 LOG7[7636:2092]: Certificate loaded
2013.02.17 17:06:52 LOG7[7636:2092]: Key file: G:\Dropbox\StartSSL\SSL Cert.pem
2013.02.17 17:06:52 LOG7[7636:2092]: Private key loaded
2013.02.17 17:06:52 LOG7[7636:2092]: Could not load DH parameters from G:\Dropbox\StartSSL\SSL Cert.pem
2013.02.17 17:06:52 LOG7[7636:2092]: Using hardcoded DH parameters
2013.02.17 17:06:52 LOG7[7636:2092]: DH initialized with 2048-bit key
2013.02.17 17:06:52 LOG7[7636:2092]: ECDH initialized with curve prime256v1
2013.02.17 17:06:52 LOG7[7636:2092]: SSL options set: 0x03000004
2013.02.17 17:06:52 LOG5[7636:2092]: Configuration successful
2013.02.17 17:06:52 LOG7[7636:2092]: Service [https] (FD=268) bound to 0.0.0.0:8088
2013.02.17 17:07:08 LOG7[7636:2092]: Service [https] accepted (FD=320) from 54.242.25.199:45922
2013.02.17 17:07:08 LOG7[7636:2092]: Creating a new thread
2013.02.17 17:07:08 LOG7[7636:2092]: New thread created
2013.02.17 17:07:08 LOG7[7636:8004]: Service [https] started
2013.02.17 17:07:08 LOG5[7636:8004]: Service [https] accepted connection from 54.242.25.199:45922
2013.02.17 17:07:08 LOG7[7636:8004]: SSL state (accept): before/accept initialization
2013.02.17 17:07:08 LOG7[7636:8004]: SSL alert (write): fatal: handshake failure
2013.02.17 17:07:08 LOG3[7636:8004]: SSL_accept: 1408A10B: error:1408A10B:SSL routines:SSL3_GET_CLIENT_HELLO:wrong version number
2013.02.17 17:07:08 LOG5[7636:8004]: Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket
2013.02.17 17:07:08 LOG7[7636:8004]: Local socket (FD=320) closed
2013.02.17 17:07:08 LOG7[7636:8004]: Service [https] finished (0 left)

ATUALIZAR:

Aqui está o meu stunnel.confarquivo.

Ram Rachum
fonte
O arquivo da caixa de depósito parece estar ausente. O servidor está retornando HTTP / 404
Mircea Vutcovici,
@MirceaVutcovici Desculpe, corrigido agora.
Ram Rachum
Aumentei a recompensa na questão para 100 pontos.
Rachum Ram
1
Você poderia incluir o arquivo stunnel.conf também? Porque parece que seu servidor está recusando conexões SSLv3.0
Stephane
Incluído agora
Ram Rachum

Respostas:

3

Você deve fazer uma captura de rede e ver por que ela foi rejeitada. Verifique também os logs nos dois pontos finais. Aumente o debugnível no stunnel conf.

Você precisa fazer um rastreamento de rede para descobrir qual versão do protocolo SSL o cliente está suportando. Em seguida, verifique se o servidor também suporta essa versão.

Um cliente envia uma mensagem ClientHello especificando a versão mais alta do protocolo TLS compatível, um número aleatório, uma lista de CipherSuites sugeridos e métodos de compactação sugeridos.

Fonte

Observe que o protocolo SSL foi alterado há alguns anos devido a um erro de segurança na renegociação. Consulte CVE-2009-3555 e esta página na renegociação de SSL

O servidor está respondendo com:

Secure Sockets Layer
    SSLv3 Record Layer: Alert (Level: Fatal, Description: Handshake Failure)
        Content Type: Alert (21)
        Version: SSL 3.0 (0x0300)
        Length: 2
        Alert Message
            Level: Fatal (2)
            Description: Handshake Failure (40)

Você deve verificar os logs no servidor SSL para ver por que ela recusou a conexão. Tente ativar o SSL depuração em stunnel com: debug=7.

O stunnelservidor possui options = 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 stunnelconfiguração para aceitar o SSLv3.

Mircea Vutcovici
fonte
Atualizei a pergunta com mais detalhes. Você ainda precisa que eu faça uma captura de rede?
Ram Rachum
Sim, para saber qual versão é suportada pelo cliente SSL.
Mircea Vutcovici
Eu fiz uma captura do Wireshark e a vinculei a ela na pergunta.
Ram Rachum
1
Ok, o problema é que você tem o modo FIPS ativado (é ativado por padrão no stunnel compilado com FIPS) e que o cliente está tentando se conectar usando SSLv3 (presumo que você precise confirmar a partir de logs ou captura de rede). Mas o FIPS está funcionando apenas com TLSv1 ou mais recente.
Mircea Vutcovici
1
Você tem 2 soluções: 1. atualize o cliente SSL (Twilio). 2. desativar conformidade FIPS, e diminuir a segurança, adicionando fips = noa stunnel.conf
Mircea Vutcovici
0

Pode ser uma incompatibilidade de versão SSL entre o cliente e o servidor. Verifique se o cliente está configurado apenas para SSL3, desativando versões mais antigas do SSL no cliente.

Daniel t.
fonte
Não tenho ideia de como fazer isso.
Ram Rachum