web-dev-qa-db-ger.com

SSL_connect return = 1 errno = 0 state = SSLv3-Leseserverzertifikat B: Zertifikatprüfung fehlgeschlagen

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..

279
Vikash

Beim Versuch, den JQuery - Generator für Rails 3

Ich habe es so gelöst:

  1. 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]
    • oder einfach direkt runter ziehen wget http://curl.haxx.se/ca/cacert.pem
  2. 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.

135
Erik G.

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


Aktualisieren

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 .

134
htanata

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 in C:\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.

129
ryanjones

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.

31
martoche

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).

24
paulmorar

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

20
Stewart

Das neue zertifizierte Juwel wurde entwickelt, um dies zu beheben:

https://github.com/stevegraham/certified

19
Kevin

Fügen Sie einfach gem 'certified' in Ihr Gemfile ein und führen Sie die Bundle-Installation aus.

  1. edelstein 'zertifiziert'
  2. bundle installieren
18
Nitish Kumar

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.

17
Mike

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]
14
Jonathan

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

13
ramasamy

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
12
monteirobrena

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
12
Scott

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.

12
Quv

Ich hatte das gleiche Problem bei der Arbeit an einem Ruby Projekt. Ich verwende Windows 7 64bit.

Ich habe das gelöst durch:

  1. Herunterladen der Datei cacert.pem von http://curl.haxx.se/ca/cacert.pem .
  2. Speichere diese Datei in C: /RubyCertificates/cacert.pem
  3. Dann setze meine Umgebungsvariable "SSL_CERT_FILE" auf "C:\RubyCertificates\cacert.pem"

quelle: https://Gist.github.com/fnichol/86755

10
Henry

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
7
Synthesis

Die einfachste Antwort, die für mich funktioniert hat, war diese

Sudo apt-get install openssl ca-certificates

Und voila !!!

7
Pratik Bothra

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
4
Dave Brace

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
4
Wraithseeker

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.

4
martoche

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`
4
Rahul

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

3
Tarun Rathi

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
3
Alston

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)
2

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
2
Hortitude

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
2
suda

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!

2
Musicalmindz

Das neueste rubygem-update-2.6.7 hat dieses Problem behoben. http://guides.rubygems.org/ssl-certificate-update/

1
singh2005

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.

1
ndnenkov

Das Hinzufügen von gem 'certified', '~> 1.0' Zu meinem Gemfile und das Ausführen von bundle löste dieses Problem für mich.

1
user2573222

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.

1
Saurin Parikh

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.

1
Jules Corb

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
1
Albert.Qing

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.

1
PackedUp

Füge dies zu deiner Gemdatei hinzu:

gem 'cliver', :git => 'git://github.com/yaauie/cliver', :ref => '5617ce'

0
Jesse Farmer

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
0
abcd_win

Die Installation des folgenden Pakets unter Ubuntu hat das Problem für mich behoben

Sudo apt-get install libssl-dev

0
bruckerrlb