Rotinas SSL: SSL23_WRITE: falha no handshake ssl


32

Estou tentando usar o OpenSSL para conectar-se a um servidor SSL.

Quando eu corro:

openssl s_client -connect myhost.com:443

As seguintes configurações do cliente SSL funcionam perfeitamente:

  • Windows ( OpenSSL 0.9.83e 23 Feb 2007)
  • Linux ( OpenSSL 0.9.8o 01 Jun 2010)
  • Linux ( OpenSSL 1.0.0-fips 29 Mar 2010)

A saída de qualquer conexão bem-sucedida se parece com isso:

New, TLSv1/SSLv3, Cipher is DES-CBC3-SHA
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DES-CBC3-SHA
    Session-ID: (hidden)
    Session-ID-ctx:
    Master-Key: (hidden)
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    Start Time: 1337266099
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

No entanto, quando eu uso o cliente com o meu Ubuntu 12.04 (w / OpenSSL 1.0.1 14 Mar 2012), recebo o erro:

CONNECTED(00000003)
...:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:177:

Como posso resolver isso?

Todas as dicas são muito apreciadas!


Qual protocolo e cifra são usados ​​quando se conecta a partir do Windows?
Shane Madden

Ele diz: New, TLSv1/SSLv3, Cipher is DES-CBC3-SHA. Eu gostaria de entender o que tudo isso significa! :)
Jaakko

DES? Essa é uma cifra estranha para ter a maior prioridade. Com que tipo de servidor você está se conectando?
Shane Madden

1
Talvez os padrões no openssl mais recente estejam restringindo por padrão as versões mais antigas do protocolo ssl? Haveria algumas razões para fazê-lo, dada a recente confusão BESTA ...
rackandboneman

1
D'oh, entendido. Você está testando os clientes no seu site.
brent

Respostas:


28

Este parece ser um problema conhecido no OpenSSL 1.0.1 do Ubuntu: https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/965371

Não parece que uma correção esteja disponível. Se possível, você pode fazer o downgrade para 1.0.0.

Experimentar openssl s_client -tls1 -connect myhost.com:443


Mais detalhes sobre o problema no ticket Debian: bugs.debian.org/cgi-bin/bugreport.cgi?bug=665452
brent

PS Eu te darei a recompensa quando ele expira (19 horas)
Jaakko

1
Parece bom :) Informação final, ticket upstream com OpenSSL que parece ser a causa raiz do problema: rt.openssl.org/Ticket/…
brent

Obrigado! Esta resposta também funciona para o OpenSSL 0.9.8zh 14/01/2016 no Mac
tytk 26/01

4

Esse erro pode ser causado por uma versão mais antiga do openssl quando não é possível negociar novamente a cifra (eu gerei um certificado autoassinado usando curvas elípticas).

Especificamente, eu estava recebendo o mesmo erro no MacOS com o padrão openssl - 0.9.8zh

Depois de instalar a versão do OpenSSL 1.0.2f, o erro desapareceu:

~/bin/openssl s_client -connect localhost:45678 | grep Cipher

verify return:1
New, TLSv1/SSLv3, Cipher is ECDHE-ECDSA-AES256-GCM-SHA384
    Cipher    : ECDHE-ECDSA-AES256-GCM-SHA384

depois de fazer a instalação do brew, minha versão do openssl em / usr / bin / openssl era a versão antiga. Eu tive que ir especificamente para /usr/local/Cellar/openssl/1.0.2o_2/bin para executar a versão mais recente do OpenSSL
Gopi Palamalai

2

Se você encontrar esse problema com um servidor Java HTTPS em execução no OpenJDK, tente editar /etc/java-7-openjdk/security/java.securitye comentar a linha

security.provider.10=sun.security.pkcs11.SunPKCS11 ${java.home}/lib/security/nss.cfg

como descoberto pela Christoph W .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.