Rutinitas SSL: SSL23_WRITE: kegagalan jabat tangan ssl

32

Saya mencoba menggunakan OpenSSL untuk terhubung ke server SSL.

Ketika saya menjalankan:

openssl s_client -connect myhost.com:443

Konfigurasi klien SSL berikut berfungsi dengan baik:

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

Output dari koneksi yang berhasil terlihat seperti ini:

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)

Namun, ketika saya menggunakan klien dengan Ubuntu 12.04 saya (w / OpenSSL 1.0.1 14 Mar 2012) saya mendapatkan kesalahan:

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

Bagaimana saya bisa melanjutkan penyelesaian ini?

Semua tips sangat kami hargai!

Jaakko
sumber
Protokol dan cipher apa yang digunakan ketika terhubung dari Windows?
Shane Madden
Ia mengatakan: New, TLSv1/SSLv3, Cipher is DES-CBC3-SHA. Saya berharap saya mengerti apa artinya semua ini! :)
Jaakko
DES? Itu sandi yang aneh untuk mendapat prioritas tertinggi. Server jenis apa yang Anda hubungkan?
Shane Madden
1
Mungkin default pada openssl baru secara default membatasi versi protokol ssl yang lebih lama? Akan ada beberapa alasan untuk melakukannya mengingat kekacauan BEAST baru-baru ini ...
rackandboneman
1
Duh, mengerti. Anda menguji klien terhadap situs Anda.
brent

Jawaban:

28

Ini tampaknya menjadi masalah yang diketahui dengan 1.0.1 OpenSSL Ubuntu: https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/965371

Itu tidak terlihat seperti perbaikan tersedia. Jika memungkinkan, Anda dapat menurunkan versi ke 1.0.0.

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

brent
sumber
Lebih detail masalah pada tiket Debian: bugs.debian.org/cgi-bin/bugreport.cgi?bug=665452
brent
PS Aku akan memberimu hadiah saat kedaluwarsa (19 jam)
Jaakko
1
Kedengarannya bagus :) Sepotong informasi terakhir, tiket hulu dengan OpenSSL yang tampaknya menjadi akar masalah: rt.openssl.org/Ticket/…
brent
Terima kasih! Jawaban ini juga berfungsi untuk OpenSSL 0.9.8zh 14 Jan 2016 di Mac
tytk
4

Kesalahan ini dapat disebabkan oleh versi openssl yang lebih lama ketika tidak dapat menegosiasikan ulang sandi (saya membuat sertifikat yang ditandatangani sendiri menggunakan kurva eliptik).

Secara khusus, saya mendapatkan kesalahan yang sama pada MacOS dengan openssl default - 0.9.8zh

Setelah menginstal versi pembuatan OpenSSL 1.0.2f kesalahan hilang:

~/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
sumber
setelah melakukan brew install, versi openssl saya di / usr / bin / openssl adalah versi lama. Saya harus secara khusus pergi ke /usr/local/Cellar/openssl/1.0.2o_2/bin untuk menjalankan versi openssl terbaru
Gopi Palamalai
2

Jika Anda mendapatkan masalah ini dengan server Java HTTPS berjalan di OpenJDK, cobalah mengedit /etc/java-7-openjdk/security/java.securitydan mengomentari barisnya

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

seperti yang ditemukan oleh Christoph W .

Aldaviva
sumber