Ich verwende Authlogic-Connect für Anmeldungen von Drittanbietern. Nach dem Ausführen der entsprechenden Migrationen scheinen die Anmeldungen bei Twitter/Google/Yahoo einwandfrei zu funktionieren, aber die Facebook-Anmeldung löst eine Ausnahme aus:
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
Das Entwicklerprotokoll zeigt
OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed):
app/controllers/users_controller.rb:37:in `update'
Bitte vorschlagen..
Beim Versuch, den JQuery - Generator für Rails 3
Ich habe es so gelöst:
Holen Sie sich das CURL Certificate Authority (CA) -Paket. Dies können Sie tun mit:
Sudo port install curl-ca-bundle
[Wenn Sie MacPorts verwenden]wget http://curl.haxx.se/ca/cacert.pem
Führen Sie den Ruby Code aus, der versucht, die SSL-Zertifizierung zu überprüfen: SSL_CERT_FILE=/opt/local/etc/certs/cacert.pem Rails generate jquery:install
. In Ihrem Fall möchten Sie dies entweder als Umgebungsvariable festlegen, die der Server abruft, oder Fügen Sie der Datei environment.rb etwas wie ENV['SSL_CERT_FILE'] = /path/to/your/new/cacert.pem
hinzu.
Sie können die CA-Dateien auch einfach auf dem Betriebssystem installieren (ich habe dies nicht ausprobiert) - es gibt ausführliche Anweisungen hier - dies sollte auf ähnliche Weise funktionieren, ich habe dies jedoch nicht persönlich ausprobiert .
Grundsätzlich besteht das Problem darin, dass ein Webdienst mit einem Zertifikat antwortet, das für eine Zertifizierungsstelle signiert ist, die OpenSSL nicht überprüfen kann.
Wenn Sie RVM unter OS X verwenden, müssen Sie dies wahrscheinlich ausführen:
rvm osx-ssl-certs update all
Weitere Informationen finden Sie hier: http://rvm.io/support/fixing-broken-ssl-certificates
Und hier ist die vollständige Erklärung: https://github.com/wayneeseguin/rvm/blob/master/help/osx-ssl-certs.md
Unter Ruby 2.2 müssen Sie möglicherweise Ruby aus dem Quellcode neu installieren, um dieses Problem zu beheben. So geht's (ersetzen Sie 2.2.3
durch Ihre Ruby Version):
rvm reinstall 2.2.3 --disable-binary
Gutschrift an https://stackoverflow.com/a/32363597/435 und Ian Connor .
So können Sie das Problem unter Windows beheben: https://Gist.github.com/86755 (erstellt von Fletcher Nichol)
Auszug:
Der manuelle Weg (langweilig)
Laden Sie die
cacert.pem
Datei von http://curl.haxx.se/ca/cacert.pem . Speichern Sie diese Datei inC:\RailsInstaller\cacert.pem
.Machen Sie jetzt Ruby auf Ihr Zertifizierungsstellen-Bundle aufmerksam, indem Sie
SSL_CERT_FILE
. Um dies in Ihrer aktuellen Eingabeaufforderungssitzung festzulegen, geben Sie Folgendes ein:set SSL_CERT_FILE=C:\RailsInstaller\cacert.pem
Um dies zu einer dauerhaften Einstellung zu machen, fügen Sie dies in Ihrem Kontrollfeld hinzu.
Ruby kann keine vertrauenswürdigen Stammzertifikate finden.
In diesem Blogbeitrag finden Sie eine Lösung: " Ruby 1.9 und der SSL-Fehler ".
Die Lösung besteht darin, die
curl-ca-bundle
Port, der dieselben von Firefox verwendeten Root-Zertifikate enthält:Sudo port install curl-ca-bundle
und teilen Sie Ihrem
https
-Objekt mit, es zu verwenden:https.ca_file = '/opt/local/share/curl/curl-ca-bundle.crt'
Beachten Sie, dass Sie, wenn Ihr Code unter Ubuntu ausgeführt werden soll, das
ca_path
-Attribut stattdessen mit dem Standardspeicherort für Zertifikate/etc/ssl/certs
.
Der Grund, warum dieser Fehler unter OSX angezeigt wird, ist der von rvm installierte Ruby.
Wenn Sie unter OSX auf dieses Problem stoßen, finden Sie in diesem Blog-Beitrag eine wirklich umfassende Erklärung:
http://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html
Die Kurzversion ist, dass RVM für einige Ruby-Versionen vorkompilierte Binärdateien herunterlädt, die an der falschen Stelle nach Zertifikaten suchen. Indem Sie RVM zwingen, die Quelle herunterzuladen und auf Ihrem eigenen Computer zu kompilieren, stellen Sie sicher, dass die Konfiguration für den Zertifikatspeicherort korrekt ist.
Der Befehl dazu lautet:
rvm install 2.2.0 --disable-binary
wenn Sie die betreffende Version bereits haben, können Sie sie erneut installieren:
rvm reinstall 2.2.0 --disable-binary
(Natürlich ersetzen Sie Ihre Ruby Version nach Bedarf).
Das Problem ist, dass Ruby kein vertrauenswürdiges Stammzertifikat finden kann. Ab 1.9 prüft Ruby dies. Sie müssen sicherstellen, dass Sie das Curl-Zertifikat in Form einer PEM-Datei auf Ihrem System haben. Sie müssen auch sicherstellen, dass sich das Zertifikat an dem Ort befindet, von dem Ruby erwartet, dass es sich befindet. Sie können dieses Zertifikat erhalten bei ...
http://curl.haxx.se/ca/cacert.pem
Wenn Sie ein RVM- und OSX-Benutzer sind, hängt der Speicherort Ihrer Zertifikatdatei von der verwendeten Version von Ruby ab. Das explizite Setzen des Pfades mit: ca_path ist eine schlechte Idee, da Ihr Code bei der Produktion nicht portierbar ist. Damit möchten Sie Ruby ein Zertifikat am Standardspeicherort zur Verfügung stellen (und davon ausgehen, dass Ihre Entwickler wissen, was sie tun). Mit dtruss können Sie herausfinden, wo das System nach der Zertifikatsdatei sucht.
In meinem Fall hat das System nach der cert-Datei in gesucht
/Users/stewart.matheson/.rvm/usr/ssl/cert.pem
mACOSX-System würde jedoch ein Zertifikat in erwarten
/System/Library/OpenSSL/cert.pem
Ich habe das heruntergeladene Zertifikat in diesen Pfad kopiert und es hat funktioniert. HTH
Das neue zertifizierte Juwel wurde entwickelt, um dies zu beheben:
Fügen Sie einfach gem 'certified' in Ihr Gemfile ein und führen Sie die Bundle-Installation aus.
Auf Mac OS X Lion mit dem neuesten Macport:
Sudo port install curl-ca-bundle
export SSL_CERT_FILE=/opt/local/share/curl/curl-ca-bundle.crt
Führen Sie dann den fehlgeschlagenen Job erneut aus.
Beachten Sie, dass sich der Speicherort der Zertifizierungsdatei geändert hat, seit Eric G am 12. Mai geantwortet hat.
Ein Einzeiler behebt es für Windows in einer Admin-Eingabeaufforderung
choco install wget
(siehe zuerst chocolatey.org )
wget http://curl.haxx.se/ca/cacert.pem -O C:\cacert.pem && setx /M SSL_CERT_FILE "C:\cacert.pem"
Oder machen Sie einfach folgendes:
gem sources -r https://rubygems.org/
gem sources -a http://rubygems.org/
Milanios Methode:
gem sources -r https://rubygems.org
gem sources -a http://rubygems.org
gem update --system
gem sources -r http://rubygems.org
gem sources -a https://rubygems.org
gem install [NAME_OF_GEM]
Nun, das hat bei mir funktioniert
rvm pkg install openssl
rvm reinstall 1.9.2 --with-openssl-dir=$rvm_path/usr
Irgendwas stimmt nicht mit der Openssl-Implementierung meines Ubuntu 12.04
Ich habe versucht, curl-ca-bundle
Mit brew
zu installieren, aber das Paket ist nicht mehr verfügbar:
$ brew install curl-ca-bundle
Error: No available formula for curl-ca-bundle
Searching formulae...
Searching taps...
Die Lösung, die mir auf dem Mac geholfen hat, war:
$ cd /usr/local/etc/openssl/certs/
$ Sudo curl -O http://curl.haxx.se/ca/cacert.pem
Fügen Sie diese Zeile in Ihren ~/.bash_profile
(Oder ~/.zshrc
Für zsh) ein:
export SSL_CERT_FILE=/usr/local/etc/openssl/certs/cacert.pem
Dann aktualisieren Sie Ihr Terminal:
$ source ~/.bash_profile
Hier ist eine weitere Option zum Debuggen.
Verwenden Sie dies auf keinen Fall in einer Produktionsumgebung, da sonst die Vorteile der Verwendung von SSL zunichte gemacht werden. Dies ist nur in Ihrer lokalen Entwicklungsumgebung zulässig.
require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
Obwohl ich weiß, dass es sich um eine eher lahme Lösung handelt, teile ich dies dennoch, da es so aussieht, als würden nur sehr wenige, die hier antworten, Windows verwenden, und ich denke, dass einige Windows-Benutzer (ich eingeschlossen) eine einfache und intuitive Lösung schätzen würden Ansatz.
require 'openssl'
puts OpenSSL::X509::DEFAULT_CERT_FILE
Das zeigt an, wo Ihr openssl nach der cert-Datei sucht. Mein Name ist nicht Luis, aber meins war C:/Users/Luis/Code/luislavena/knap-build/var/knapsack/software/x86-windows/openssl/1.0.0l/ssl/cert.pem
. Der Pfad kann je nach eigener Umgebung unterschiedlich sein (z. B. openknapsack
anstelle von luislavena
).
Der Pfad änderte sich nicht einmal nach set SSL_CERT_FILE=C:\foo\bar\baz\cert.pem
über die Konsole, also ... habe ich das Verzeichnis erstelltC:\Users\Luis\Code\luislavena\knap-build\var\knapsack\software\x86-windows\openssl\1.0.0l\ssl
auf meiner lokalen Festplatte und legen Sie eine Zertifikatsdatei hinein.
Lahm wie es ist, wird dies sicherlich funktionieren.
Ich hatte das gleiche Problem bei der Arbeit an einem Ruby Projekt. Ich verwende Windows 7 64bit.
Ich habe das gelöst durch:
OS X 10.8.x mit Homebrew:
brew install curl-ca-bundle
brew list curl-ca-bundle
cp /usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt /usr/local/etc/openssl/cert.pem
Die einfachste Antwort, die für mich funktioniert hat, war diese
Sudo apt-get install openssl ca-certificates
Und voila !!!
Ich bin auf dieses Problem gestoßen und auf die vorgeschlagene Korrektur von rvm osx-ssl-certs update all
hat nicht funktioniert, obwohl ich ein RVM-Benutzer unter OSX bin.
Das Update, das für mich funktioniert hat, war die Neuinstallation der neuesten Version von openssl:
brew update
brew remove openssl
brew install openssl
Ich habe dieses Problem behoben, indem ich es im Terminal ausführte. Eine vollständige Beschreibung ist verfügbar über hier
rvm install 2.2.0 --disable-binary
Dann, wie dieser Blog-Beitrag andeutet,
" So heilen Sie das riskante Standard-HTTPS-Verhalten von Net :: HTTP "
vielleicht möchten Sie das Juwel always_verify_ssl_certificates
installieren, mit dem Sie einen Standardwert für ca_file
festlegen können.
Das hat bei mir funktioniert. Wenn Sie rvm und brew verwenden:
rvm remove 1.9.3
brew install openssl
rvm install 1.9.3 --with-openssl-dir=`brew --prefix openssl`
Wenn Sie Ihre Rails App lokal ausführen, fügen Sie einfach diese Zeile am Ende von application.rb hinzu.
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
Danach können Sie die App ohne Probleme nutzen. Sie können es einen Hack nennen, aber es wird nicht empfohlen. Verwenden Sie diese Option nur, wenn Sie lokal ausgeführt werden müssen
OSX-Lösung:
installieren Sie die neueste Version von rvm stable
rvm get stable
verwenden Sie den Befehl rvm, um die Zertifikate automatisch aufzulösen
rvm osx-ssl-certs update all
Wenn Sie einen symbolischen Link in der Datei/usr/local/etc/openssl haben, der auf cert.pem verweist, versuchen Sie Folgendes:
Ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE" (should be /usr/local/etc/openssl)
cd /usr/local/etc/openssl
wget http://curl.haxx.se/ca/cacert.pem
ln -s cacert.pem 77ee3751.0 (77ee3751.0 is my symbolic link, should depend on the openssl version)
Nur weil die Anweisungen für das, was für mich funktionierte, ein bisschen anders waren, dachte ich, ich füge meine 2 Cent hinzu:
Ich bin auf OS X Lion und benutze Macports und RVM
Ich habe curl-ca-bundle installiert:
Sudo port install curl-ca-bundle
Dann habe ich meine omniauth-Konfiguration folgendermaßen angepasst:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :google_oauth2, APP_CONFIG['CONSUMER_KEY'], APP_CONFIG['CONSUMER_SECRET'],
:scope => 'https://www.google.com/m8/feeds https://www.googleapis.com/auth/userinfo.profile',
:ssl => {:ca_path => "/share/curl/curl-ca-bundle.crt"}
end
Was für mich funktioniert hat, ist eine Kombination von Antworten, nämlich:
# Reinstall OpenSSL
brew update
brew remove openssl
brew install openssl
# Download CURL CA bundle
cd /usr/local/etc/openssl/certs
wget http://curl.haxx.se/ca/cacert.pem
/usr/local/opt/openssl/bin/c_rehash
# Reinstall Ruby from source
rvm reinstall 2.2.3 --disable-binary
Hier ist, was ich getan habe, was geholfen hat, wenn Sie speziell ein Problem mit Leopard haben.
Mein Zertifikat war alt und musste aktualisiert werden. Ich habe folgendes heruntergeladen:
http://curl.haxx.se/ca/cacert.pem
Dann ersetzte ich mein Zertifikat, das hier auf Leopard gefunden wurde:
/usr/share/curl/curl-ca-bundle.crt
Laden Sie neu, was auch immer Sie haben, das auf es zugreift, und Sie sollten bereit sein zu gehen!
Das neueste rubygem-update-2.6.7 hat dieses Problem behoben. http://guides.rubygems.org/ssl-certificate-update/
Ich musste Ruby neu installieren. Dies sollte es lösen, wenn Sie Ubuntu & rbenv verwenden:
rbenv uninstall your_version
# install dependencies
Sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev
# install Ruby with patch
curl -fsSL https://Gist.github.com/mislav/055441129184a1512bb5.txt | \
rbenv install --patch your_version
Weitere Informationen finden Sie im rbenv Wiki zu diesem Thema.
Das Hinzufügen von gem 'certified', '~> 1.0'
Zu meinem Gemfile
und das Ausführen von bundle
löste dieses Problem für mich.
Führe einfach das certified-update
ausführbar und dieser Befehl stellt sicher, dass alle Ihre Zertifikate auf dem neuesten Stand sind.
Dies funktionierte für meine Ruby on Rails application in Windows.
Haben dieses Problem mit Ruby 2.3.4:
Ich habe es gelöst, OpenSSL deinstalliert und neu installiert. Ich rannte:
brew uninstall --ignore-dependencies openssl
dann
brew install openssl
Es hat den Job gemacht.
Manchmal ist es nicht immer das Problem von rvm in MAC OSX, wenn Sie .rvm entfernen, das Problem immer noch (insbesondere während Sie Daten von timemachine sichern), können Sie dies versuchen.
1.brew update
2.brew install openssl
Ich hatte einige Tage Probleme und hackte herum. Dieser Link hat sich als äußerst hilfreich für mich erwiesen. Es hat mir geholfen, ein erfolgreiches Upgrade von SSL auf MAC OS X 9 durchzuführen.
Füge dies zu deiner Gemdatei hinzu:
gem 'cliver', :git => 'git://github.com/yaauie/cliver', :ref => '5617ce'
Dies kann das Problem der fehlerhaften/ungültigen SSL-Zertifikate sein. Auf einem Mac können Sie diesen Befehl verwenden, um die SSL-Zertifikate zu aktualisieren:
rvm osx-ssl-certs update all
Die Installation des folgenden Pakets unter Ubuntu hat das Problem für mich behoben
Sudo apt-get install libssl-dev