Procedury SSL: SSL23_WRITE: błąd uzgadniania ssl

32

Próbuję użyć OpenSSL do połączenia z serwerem SSL.

Kiedy biegnę:

openssl s_client -connect myhost.com:443

Następujące konfiguracje klienta SSL działają dobrze:

  • 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)

Dane wyjściowe z każdego udanego połączenia wyglądają następująco:

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)

Jednak gdy używam klienta z moim Ubuntu 12.04 (w / OpenSSL 1.0.1 14 Mar 2012) , pojawia się błąd:

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

Jak mogę rozwiązać ten problem?

Wszystkie wskazówki są mile widziane!

Jaakko
źródło
Jaki protokół i szyfr są używane, gdy łączy się z systemem Windows?
Shane Madden
Mówi: New, TLSv1/SSLv3, Cipher is DES-CBC3-SHA. Chciałbym zrozumieć, co to wszystko znaczy! :)
Jaakko
DES? To dziwny szyfr, który ma najwyższy priorytet. Do jakiego serwera się łączysz?
Shane Madden
1
Może wartości domyślne w nowszym openssl domyślnie ograniczają starsze wersje protokołu ssl? Byłyby ku temu powody, biorąc pod uwagę niedawny bałagan BEAST ...
rackandboneman
1
Nie rozumiem. Testujesz klientów na swojej stronie.
brent

Odpowiedzi:

28

Wygląda na to, że jest to znany problem z OpenSSL 1.0.1 Ubuntu: https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/965371

Nie wygląda na to, że poprawka jest dostępna. Jeśli to możliwe, możesz obniżyć do wersji 1.0.0.

Próbować openssl s_client -tls1 -connect myhost.com:443

brent
źródło
Więcej szczegółów problemu na bilecie Debiana: bugs.debian.org/cgi-bin/bugreport.cgi?bug=665452
brent
PS Dam ci nagrodę, gdy wygaśnie (19 godzin)
Jaakko
1
Brzmi dobrze :) Ostatnia informacja, bilet upstream z OpenSSL, który wydaje się być podstawową przyczyną problemu: rt.openssl.org/Ticket/…
brent
Dzięki! Ta odpowiedź działa również dla OpenSSL 0.9.8zh 14 stycznia 2016 na Macu
tytk
4

Ten błąd może być spowodowany starszą wersją openssl, gdy nie można ponownie wynegocjować szyfru (wygenerowałem samopodpisany certyfikat za pomocą krzywych eliptycznych).

W szczególności otrzymywałem ten sam błąd w systemie MacOS z domyślnym openssl - 0,9,8 Hz

Po zainstalowaniu wersji parzenia OpenSSL 1.0.2f błąd zniknął:

~/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
Andrei Sura
źródło
po wykonaniu instalacji parzenia moja wersja openssl w / usr / bin / openssl była starą wersją. Musiałem konkretnie przejść do /usr/local/Cellar/openssl/1.0.2o_2/bin, aby uruchomić najnowszą wersję openssl
Gopi Palamalai
2

Jeśli wystąpi ten problem z serwerem Java HTTPS uruchomionym na OpenJDK, spróbuj edytować /etc/java-7-openjdk/security/java.securityi komentować linię

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

jak odkrył Christoph W .

Aldaviva
źródło