it-swarm.com.de

Wie man OpenSSL :: SSL :: SSLError loswird

Ich versuche, Benutzer bei Facebook mit OmniAuth zu authentifizieren. Anfangs hat es funktioniert, aber auf dem Weg hat es einfach aufgehört zu arbeiten und hat mir diese Fehlermeldung angezeigt:

OpenSSL :: SSL :: SSLError SSL_connect zurückgegeben = 1 errno = 0 state = SSLv3 gelesen Serverzertifikat B: Zertifikat Überprüfung fehlgeschlagen

Der gleiche Code funktioniert gut für Twitter und ich kann nicht verstehen, warum er für Facebook nicht funktioniert. Ich habe online nach Hilfe gesucht, war aber nicht erfolgreich. 

Dies ist der Link zu meiner Website: http://www.bestizz.com/
Diese URL würde Ihnen die Fehlermeldung geben: http://www.bestizz.com/auth/facebook

31
Eugene

Ruby kann keine Stammzertifikate finden. Hier ist eine Option für Debugging Zwecke. Fügen Sie folgenden Code am Anfang Ihres Skripts ein:

   require 'openssl'
   OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
20
RAJ

Fügen Sie den folgenden Code zu config/initializers/fix_ssl.rb hinzu

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

Hinweis:

Viele Betriebssysteme werden bereits mit einem mitgelieferten Zertifikatspaket geliefert. Zum Beispiel in Red Hat Enterprise Linux und CentOS ist es installiert in:

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

Für Ubuntu ist es an:

/etc/ssl/certs/ca-certificates.crt
8
Amal Kumar S

Das gleiche Problem hatte ich nach der Aktualisierung von Ruby auf Yosemite, während ich mich bei Google authentifizierte.

Im Anschluss daran: https://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html schien mein Problem zu lösen.

Aus Gründen der Geschichte werde ich zitieren:

Der von Ruby installierte Ruby sucht also in das falsche Verzeichnis für Zertifikate, während der OSX-Ruby das richtige sucht. In diesem Fall handelt es sich um ein OSX-Systemverzeichnis.

Also ist der rvm-installierte Ruby das Problem.

Diese Diskussion auf Github gab schließlich die Lösung: Irgendwie enthält RVM eine vorkompilierte Version von Ruby, die statisch mit einem openssl verknüpft ist, das/etc/openssl nach seinen Zertifikaten durchsucht.

Was Sie tun möchten, ist, KEINE der vorkompilierten Rubine zu verwenden, sondern Ruby auf Ihrem lokalen Rechner kompilieren zu lassen, z. B. so: rvm install 2.2.0 --disable-binary

Am Ende musste ich laufen:

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

Hoffe das hilft

7
rpbaltazar

Anscheinend schlägt die SSL-Überprüfung für Facebook fehl. Ich bin kein OpenSSL-Meister, aber ich denke, das sollte für Sie funktionieren.

Angenommen, Sie verwenden eine aktuelle Version von OmniAuth (> = 0.2.2, ich gehe davon aus, dass Sie es sind) und eine Version von Faraday> = 0.6.1 (die Stack-Ablaufverfolgung sagt Sie), können Sie den Speicherort übergeben Ihres CA-Zertifikatspakets. Passen Sie Ihr OmniAuth-Setup für Facebook entsprechend an:

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

und ersetzen Sie '/etc/ssl/certs' durch den Pfad zu Ihrem Bundle. Wenn Sie eine benötigen, glaube ich, dass diese Datei für Sie funktionieren wird - legen Sie sie einfach irgendwo ab, erteilen Sie die erforderlichen Berechtigungen und zeigen Sie Ihre App darauf.

Danke an Alex Kremer bei this SO antworten Sie mit auf die ausführlichen Anweisungen.

6
Michelle Tilley

Dieser Link sollte funktionieren. https://Gist.github.com/fnichol/867550 Befolgen Sie einfach die Anweisungen. Sie müssen das Rails-Installationsprogramm herunterladen und zwei Befehlszeilenfunktionen ausführen.

1
JohnOsborne

Tun Sie dies, wird der Zertifikatsfehler mit openssl ausgegeben

Sudo curl http://curl.haxx.se/ca/cacert.pem -o /opt/local/etc/openssl/cert.pem
0
Raymond Gao

Eine hässliche Problemumgehung bestand darin, die Klasse in Net :: HTTP zu überschreiben und die Variable festzulegen, die besagt, dass SSL-Zertifikate nicht überprüft werden:

    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

Ich habe es so gemacht, weil ich nicht mit dem Quellcode des Gems herumspielen möchte, der den Edelstein nennt, der den Edelstein nennt, der Net :: HTTP nennt. Ich sollte wirklich zurückgehen und herausfinden, wie man es anstößt, um stattdessen eine separate cacert.pem-Datei anzusehen. Ich kann die cacert.pem-Datei des Servers nicht ändern, da dies die beste Route wäre.

0
JBB