2014-09-12 14 views
20

Il seguente codice restituisce il seguente errore: OpenSSL :: SSL :: SSLError: SSL_connect SYSCALL restituito = 5 errno = 0 stato = SSLv3 leggere server ciao AOpenSSL :: SSL :: SSLError: SSL_connect SYSCALL restituito = 5 errno = 0 stato = SSLv3 server di lettura ciao A

require 'net/https' 
uri = URI.parse("https://<server>.com") 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 
http.ssl_version = 'SSLv3' 
http.get(uri.request_uri) 

Qualche idea sul perché? Ho provato tutto quanto menzionato in tutte le altre domande, ancora senza fortuna.

  • Rubino 1.9.3p484 (2013/11/22 revisione 43786) [x86_64-darwin13.3.0]
  • OpenSSL 0.9.8y 5 Feb 2013

Aggiornamento I

Ho provato il seguente:

  • Ruby 2.0.0p353 (2013-11-22 revisione 43784) [x86_64-darwin13.3.0]
  • OpenSSL 1.0.1i 6 ago 2014

Aggiornamento II

  • SSL_VERSION Costretto a: TLSv1_2

Ancora nessuna fortuna.

Aggiornamento III

Va bene, ecco il codice finale - grazie a Steffen (vedi risposta di seguito):

require 'net/https' 
uri = URI.parse("https://<server>.com") 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 
http.ssl_version = :TLSv1 
http.ciphers = ['RC4-SHA'] 
http.get(uri.request_uri) 

Dubito che la mia domanda sarà rilevante per chiunque altro dato che era correlata su un server errato configurato a distanza.

+2

E 'stato utile per me :) – davispuh

+0

Anche sul/r/asknetsec https://www.reddit.com/r/AskNetse c/comments/64ulgg/what_would_be_a_secure_ssl_configuration_for_the/ – Dorian

risposta

25

Questo è un problema sul sito del server. Sembra che il server accetti esclusivamente TLS 1.2 e non mostri il comportamento abituale quando il client richiede qualcosa di minore (come il downgrade o l'invio di un avviso SSL), ma invece si limita a chiudere la connessione.

TLS 1.2 non è supportato da OpenSSL 0.9.8 e inoltre il codice applica SSLv3. Ottieni TLS 1.2 solo durante l'aggiornamento a OpenSSL 1.0.1.

Alcuni browser non riescono a connettersi a questo server, anche se hanno modi per aggirare tali server danneggiati. Ma mentre Firefox cercherà solo di effettuare il downgrade della connessione a una versione SSL minore (che spesso aiuta) Chrome riesce a connettersi con TLS 1.2.

Edit: ho analizzato ulteriormente la questione e ora non riesco a ottenere una connessione con TLS1.2 più, ma posso ottenere una connessione con TLS1.0 o SSL3.0, ma solo se le cifre è difficile codificato per RC4 -SHA. Ho provato altri come AES128-SHA o DES-CBC3-SHA e non funzionano. Così, mentre si presenta come un sistema davvero incasinato impostando esplicitamente

http.ssl_version = 'TLSv1'  -- or SSLv3, but TLSv1 is better 
http.ssl_cipher = 'rc4-sha' 

dovrebbe funzionare. Non sono un utente rubino, quindi la sintassi esatta potrebbe essere diversa, ma ho provato con OpenSSL s_client.

+0

Ehi, grazie per la tua risposta! Ho aggiornato la domanda di cui sopra con maggiori informazioni in base al tuo feedback. – Hesham

+0

Vedi modifica: sembra che tu possa riuscire forzando RC4-SHA come cifrario. –

+0

LAVORATO! Grazie mille per il vostro aiuto! Ecco cosa ho fatto: 'http.ssl_version =: TLSv1' e' http.ciphers = ['RC4-SHA'] '. Grazie ancora! – Hesham

0

soluzione è effettuarsi openssl 1.0.2g-1​ubuntu4.6 (da 1.0.1f-1​ubuntu2.21) (ad esempio da cedar-14 a heroku-16 stack).

heroku stack:set heroku-16 -a your-app 

E in app.json:

{ 
    ... 
    "stack": "heroku-16", 
    ... 
} 
+0

Ora ho 'SSL_connect SYSCALL restituito = 5 errno = 0 stato = SSLv2/v3 leggere server ciao A' meno spesso, ma succede ancora – Dorian

-1

Per Fastlane provare questo,

brew install ruby 
gem install fastlane 

Vedi reference

Problemi correlati