OpenSSL::SSL::SSLError: connexion SSL SYSCALL retourné=5 errno=0=SSLv3 serveur de lecture bonjour Un

le code ci-dessous produit l'erreur suivante: OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server hello 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)
<!-- 2-vous savez pourquoi? J'ai essayé tout ce qui est mentionné dans toutes les autres questions, toujours pas de chance.

  • Ruby 1.9.3p484 (2013-11-22 révision 43786) [x86_64-darwin13.3.0]
  • OpenSSL 0.9.8 y 5 Feb 2013

Mise À Jour, Je

Essayé le suivantes:

  • Ruby 2.0.0p353 (2013-11-22 révision 43784) [x86_64-darwin13.3.0]
  • OpenSSL 1.0.1 i 6 Aug 2014

mise à Jour II

  • Forcé ssl_version :TLSv1_2

Toujours pas de chance.

mise à Jour du III

Bon, voici le code final - grâce à Steffen (voir la réponse ci-dessous):

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)

je doute que ma question soit pertinente pour n'importe qui d'autre puisque c'était lié à un serveur distant mal configuré.

26
demandé sur Hesham 2014-09-12 22:04:28

2 réponses

C'est un problème sur le site du serveur. Il semble que le serveur accepte exclusivement TLS 1.2 et n'affiche pas le comportement habituel lorsque le client demande quelque chose de moins important (comme la dévalorisation ou l'envoi D'une alerte SSL) mais ferme simplement la connexion.

TLS 1.2 n'est pas supporté par OpenSSL 0.9.8 et de plus votre code applique SSLv3. Vous obtenez TLS 1.2 uniquement lors de la mise à niveau vers OpenSSL 1.0.1.

certains navigateurs vont également ne pas se connecter à ce serveur, même s'ils ont des moyens de contourner ces serveurs cassés. Mais tandis que Firefox essaiera seulement de dégrader la connexion vers une version SSL moindre (ce qui aide souvent), Chrome parvient à se connecter avec TLS 1.2.

Edit: j'ai analysé la question plus en détail et maintenant je ne peux pas obtenir une connexion avec TLS1.2 plus mais je peux obtenir une connexion avec TLS1.0 ou SSL3.0, mais seulement si les chiffres sont codés dur à RC4-SHA. J'en ai essayé d'autres comme AES128-SHA ou DES-CBC3-SHA et ça ne marche pas. Alors que ça ressemble à un vraiment foiré système de définition explicite

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

ça devrait marcher. Je ne suis pas un utilisateur ruby donc la syntaxe exacte pourrait différer, mais J'ai testé avec OpenSSL s_client.

28
répondu Steffen Ullrich 2014-09-17 18:32:57

la Solution est de mettre à jour d'openssl 1.0.2g-1​ubuntu4.6 (1.0.1f-1​ubuntu2.21) (par exemple de cedar-14heroku-16 pile).

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

Et app.json:

{
  ...
  "stack": "heroku-16",
  ...
}
0
répondu Dorian 2017-04-12 00:26:30