Comment se débarrasser D'OpenSSL:: SSL:: SSLError

j'essaie d'authentifier les utilisateurs avec Facebook en utilisant OmniAuth. Au début, ça marchait, mais en cours de route ça s'est arrêté et a commencé à me donner ce message d'erreur:

OpenSSL:: SSL:: SSLError SSL_connect retourné=1 errno=0=SSLv3 lire certificat de serveur B: certificat vérifier échec

le même code fonctionne bien pour Twitter et je ne semble pas comprendre pourquoi il ne fonctionne pas pour Facebook. J'ai cherché de l'aide en ligne, mais je n'ai pas réussi.

C'est le lien vers le site Web que je construis: http://www.bestizz.com/

Et cette url vous donnerait le message d'erreur: http://www.bestizz.com/auth/facebook

31
demandé sur John Paul Ashenfelter 2011-04-19 07:12:29

7 réponses

Ruby ne trouve aucun certificat de racine. Voici une option pour débogage . Mettez le code suivant au début de votre script:

   require 'openssl'
   OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
20
répondu RAJ 2016-09-28 07:09:29

ajouter le code suivant à config/initializers/fix_ssl.rb

require 'open-uri'
require 'net/https'

module Net
  class HTTP
    alias_method :original_use_ssl=, :use_ssl=

    def use_ssl=(flag)
      self.ca_file = "/etc/pki/tls/certs/ca-bundle.crt"  # for Centos/Redhat
      self.verify_mode = OpenSSL::SSL::VERIFY_PEER
      self.original_use_ssl = flag
    end
  end
end

Note:

de nombreux systèmes d'exploitation sont déjà fournis avec un paquet de certificats fourni. Par exemple, dans Red Hat Enterprise Linux et CentOS il est installé dans:

/etc/pki/tls/certs/ca-bundle.crt

Pour Ubuntu its à:

/etc/ssl/certs/ca-certificates.crt
8
répondu Amal Kumar S 2012-08-01 05:22:17

j'ai été confronté au même problème après avoir mis à jour Ruby en cours d'exécution sur Yosemite, mais en essayant d'authentifier avec Google.

qui suit: https://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html semble résoudre mon problème.

pour l'histoire je vais citer:

de sorte que le ruby installé par rvm ne regarde pas dans le mauvais répertoire pour les certificats tandis que L'OSX-ruby regardera dans le bon. Dans c'est cas c'est un OSX système de répertoire.

donc le ruby installé rvm est le problème.

cette discussion sur Github a finalement donné la solution: en quelque sorte RVM est livré avec une version précompilée de ruby qui est liée statiquement avec une openssl qui regarde dans /etc/openssl pour ses certificats.

ce que vous voulez faire est de ne pas utiliser les rubis précompilés et plutôt avoir ruby compilé sur votre machine locale, comme so: RVM install 2.2.0 -- disable-binaire

à la fin, j'ai dû courir:

rvm uninstall ruby-2.2.4
rvm install ruby-2.2.4 --disable-binary
gem pristine --all

Espérons que cette aide

7
répondu rpbaltazar 2016-03-18 03:21:26

semble que la vérification SSL échoue pour Facebook. Je ne suis pas maître D'OpenSSL, mais je pense que ça devrait marcher pour toi.

en supposant que vous utilisez une version à jour D'OmniAuth (>= 0.2.2, je suppose que vous l'êtes) et une version de Faraday >= 0.6.1 (la trace de pile indique que vous l'êtes), vous pouvez passer l'emplacement de votre paquet de certificats CA. Modifiez votre configuration OmniAuth pour Facebook en conséquence:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, 'appid', 'appsecret', {:scope => 'publish_stream,email', :client_options => {:ssl => {:ca_path => '/etc/ssl/certs'}}}
  # other providers...
end

et remplacer '/etc/ssl/certs' par la voie pour votre bundle. Si vous en avez besoin, je crois que ce fichier fonctionnera pour vous--il suffit de le mettre quelque part, de lui donner les permissions nécessaires, et de pointer votre application vers elle.

merci à Alex Kremer à cette réponse ainsi pour les instructions détaillées.

6
répondu Michelle Tilley 2017-05-23 11:54:34

Ce lien devrait fonctionner. https://gist.github.com/fnichol/867550 suivez les instructions. Vous devrez télécharger L'installateur de Rails et exécuter deux fonctions de ligne de commande.

1
répondu JohnOsborne 2014-03-11 00:46:01

une mauvaise solution que je viens de faire est de surcharger la classe dans Net:: HTTP et de définir la variable qui lui dit de ne pas vérifier les certs ssl:

    require 'net/http'
    require 'openssl'

    class Net::HTTP   alias_method :origConnect, :connect
        def connect
          @ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
          origConnect
        end
    end

Je l'ai fait de cette façon parce que je ne veux pas muck avec le code source du gem qui appelle le gem qui appelle le gem qui appelle Net::HTTP. Je devrais vraiment retourner et de comprendre comment les pousser à regarder distinct cacert.pem file à la place. Je ne peux pas modifier le cacert du serveur.pem, ou ce serait le meilleur itinéraire.

0
répondu JBB 2011-06-30 11:24:06

Fais ceci, cela va se faire chevaucher de l'erreur de certificat avec openssl

sudo curl http://curl.haxx.se/ca/cacert.pem -o /opt/local/etc/openssl/cert.pem
0
répondu Raymond Gao 2015-04-13 06:32:34