Wie löse ich "Zertifikatüberprüfung fehlgeschlagen" unter Windows?

74

Ich versuche, Signet für OAuth für Google-Dienste zu verwenden. Und erhalten Sie diesen Fehler:

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

Folgende Fragen beantworten:

Die Lösung scheint entweder darin ca_pathzu bestehen , VERIFY_NONESSL zu reparieren oder einzustellen .

Der veröffentlichte ca_pathFix funktioniert nur unter Linux (Port-Installation) und der Fix für VERIFY_NONEscheint für Faraday zu sein.

Gibt es eine Lösung für Windows / Signet Gem?

mbdev
quelle
Ich habe das gleiche Problem, nur mit dem paypal_adaptiveEdelstein. Hat jemand eine Antwort gefunden?
Wulftone
3
Das Problem scheint weiterhin zu bestehen, und ich habe noch nie eine wirkliche Erklärung dafür gesehen, was passiert. Verachte die vielen Hacks und Patches, die es gibt. Die Erklärung eines einfachen Laien würde einen großen Beitrag dazu leisten, allen zu helfen.
Nuby
Ich löste es, indem ich
aufhörte,
Nur zu Ihrer Information, wir haben vorübergehend eine Verbindung zu einem Server eines Drittanbieters hergestellt, bei dem Zertifikatsprobleme aufgetreten sind. Daher mussten wir IO.copy_stream( open( url, { ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE } ), download_path )nur die SSL-Überprüfung deaktivieren. In unserem Fall war die Sicherheit kein Problem, der Server war außerhalb unserer Kontrolle und es war eine vorübergehende Lösung.
Joshua Pinter

Antworten:

189

Der beste Weg, dies in Windows für Ruby selbst zu lösen, nicht nur ein Juwel, ist Folgendes:

  1. Laden Sie https://curl.haxx.se/ca/cacert.pem in c: \ railsinstaller \ cacert.pem herunter. Stellen Sie sicher, dass Sie es als PEM-Datei und nicht als Textdatei speichern.
  2. Gehen Sie zu Ihrem Computer -> Erweiterte Einstellungen -> Umgebungsvariablen
  3. Erstellen Sie eine neue Systemvariable:

    Variable: SSL_CERT_FILE Wert: C: \ RailsInstaller \ cacert.pem

  4. Schließen Sie alle Eingabeaufforderungen, einschließlich der Eingabeaufforderung Ihres Rails-Servers usw.

  5. Starten Sie eine neue Ruby Irb-Eingabeaufforderung und versuchen Sie Folgendes:

    $irb>require 'open-uri'
    $irb>open('https://www.gmail.com')
    

Es sollte jetzt alles gut funktionieren.

SomeDudeSomewhere
quelle
1
Warum poenen wir gmail.com?
Ahnbizcad
2
Zu librarian-chefIhrer Information, als ich mit dem Download von Kochbüchern für Köche arbeitete, brauchte ich dieses Zertifikat, das stattdessen mit Koch C:/opscode/chefdk/embedded/ssl/certs/cacert.pem
geliefert wird
1
Stellen Sie für Windows-Benutzer sicher, dass die Datei als "cacert.pem" und nicht als "cacert.pem.txt" gespeichert ist. Es folgten auch die SSL-Fehler
Sudarsan GP
11
Tu das nicht. Das Installieren eines zufälligen Zertifikats, das über HTTP (nicht HTTPS) heruntergeladen wurde, als vollständig vertrauenswürdiges Stammzertifikat ist nur ein Problem. Es ist egal, dass die später in der Antwort vorgeschlagene Bibliothek auch als unsicher bekannt ist.
Matthew Schinckel
2
@ DevDude Diese Lösung hat vor einigen Monaten funktioniert. Nach einem kürzlich durchgeführten Windows-Update für meinen Desktop und meinen Laptop funktioniert dies nicht mehr = / Irgendwelche Ideen?
Ka Mok
27

Lösung für Windows, die ich aus ein paar verschiedenen Antworten zusammengeschustert habe:

  1. Laden Sie https://curl.haxx.se/ca/cacert.pem herunter und fügen Sie es in YOUR_APP / lib / assets (oder wo auch immer) ein.
  2. In config / initializers / omniauth.rb :

     #config/initializers/omniauth.rb
    Rails.application.config.middleware.use OmniAuth::Builder do
      provider :facebook, CUSTOMER_KEY, CUSTOMER_SECRET, {client_options: {ssl: {ca_file: Rails.root.join('lib/assets/cacert.pem').to_s}}}
    end
    
  3. Starten Sie Ihren Server natürlich neu.

Fußnoten: Möglicherweise können Sie viele unnötige Zertifikate in der Datei cacert.pem ausschneiden, um die Größe zu verringern. Wenn Sie diese Lösung nur für die Entwicklung benötigen, können Sie die Datei außerhalb Ihres Projekts speichern und eineif Rails.env.development?_provider-Zeile mit der client_options-Hash_else_provider-Zeile ohne client_options-Hash_ erstellen.end

Arcolye
quelle
3
Das Herunterladen eines Zertifikats über HTTP ist eine schreckliche Idee.
Zigg
21

Nach zu viel Suche und Zeitverschwendung fand ich eine sehr einfache Lösung, um dieses Problem in Ruby mit Windows zu beheben.

Zwei einfache Schritte:

  1. In die Eingabeaufforderung schreiben: C:\gem install certified

  2. Fügen Sie in Ihrer rbDatei Folgendes hinzu:require 'certified'

Das ist es.

Abdelrahman Farag
quelle
Sie, Sir, sind ein Champion! Beachten Sie, dass Sie die certified-update.batDatei gelegentlich verwenden sollten , um das Zertifikat auf dem neuesten Stand zu halten.
Ruby noob hier - wenn Sie "In Ihrer rbDatei" sagen , auf welche genaue Datei beziehen Sie sich? Wäre das die boot.rbDatei?
20.
9

Das Aktualisieren des Rubygems-Paketverwaltungsframeworks hat dieses Problem für mich unter Windows 7 behoben.

https://rubygems.org/pages/download

gem update --system          # may need to be administrator or root
Aaron Robertson
quelle
Dies löste es für mich unter Windows 8.1. Hatte Gem Version 1.8.28 und aktualisiert auf 2.4.5 (Ruby 1.9.2).
Ciryon
8

Ja, ich habe die Datei omniouth.rb im Ordner initializers auf Folgendes gesetzt:

provider :facebook, FACEBOOK_KEY, FACEBOOK_SECRET, {:client_options => {:ssl => {:verify => false}}}

und das scheint jetzt gut zu funktionieren. Aber tut dies nicht für die Produktion verwendet werden .

Tom
quelle
2
Ich schätze das "Verwenden Sie dies nicht in der Produktion", aber ich denke, es sollte in allen Kappen stehen, hervorgehoben, wiederholt, hervorgehoben und wiederholt werden. Angesichts der folgenden Antwort sollte diese Antwort gelöscht werden.
Oreoshake
5

Die Verwendung der URL http: // anstelle von https: // erleichtert Ihnen dies

Ändern Sie die Edelsteinquelle in http://rubygems.org/, indem Sie die folgende Befehlszeile in Ihrer Ruby-Befehlszeile verwenden

gem sources -a http://rubygems.org/
nifCody
quelle
2

Gehen Sie zur Download-Seite für das Rubygems-Update: https://rubygems.org/gems/rubygems-update

Klicken Sie auf den Download-Link und Sie werden eine Datei mit dem Namen rubygems-update-2.6.7.gem herunterladen. Navigieren Sie in der Befehlszeile zu dem Verzeichnis, in das Sie die .gem-Datei heruntergeladen haben, und geben Sie Folgendes ein:

gem install rubygems-update-2.6.7.gem

(oder was auch immer der Dateiname war, wenn eine neuere Version)

Geben Sie dann Folgendes ein:

update_rubygems

Sie können überprüfen, ob es aktualisiert wurde mit:

gem --version

quelle
1

Hinzufügen zur DevDude-Lösung, aber Verwenden von Windows Powershell:

Laden Sie http://curl.haxx.se/ca/cacert.pem in c: \ railsinstaller \ cacert.pem herunter

An der Powershell-Eingabeaufforderung:

$env:SSL_CERT_FILE = 'c:\RailsInstaller\cacert.pem'

Ich konnte dann gem updateerfolgreich laufen

Hinweis: Sie können diese Umgebungsvariable einfach in Ihrem Profil definieren notepad $profile

df2k2
quelle
2
Das Herunterladen eines Zertifikats nicht über SSL öffnet sich für einen MITM-Angriff.
Matthew Schinckel
1

Ich hatte diesen Fehler beim Versuch, Rails 5 auf einem Windows-Computer einzurichten. Es stellte sich heraus, dass ich die Rubygem-Version auf 2.6.7 aktualisieren musste, und dann funktionierte es.

Schritt 1 Rubygem von unten herunterladen

https://rubygems.org/downloads/rubygems-update-2.6.7.gem

Schritt 2 - Installieren Sie, indem Sie auf heruntergeladene Rubygems zeigen

gem install --local C:\rubygems-update-2.6.7.gem

Schritt 3 - Überprüfen Sie, ob die neue Version 2.6.7 ist

gem --version

Schritt 4 - Jetzt deinstallieren Sie Rubygems-Update Gem sicher

gem uninstall rubygems-update -x

In Schritt 5 wurde erneut versucht, die Schienen 5 zu installieren

gem install rails --version 5.0.0

Lief wie am Schnürchen!

Ich habe Informationen erhalten von: http://guides.rubygems.org/ssl-certificate-update/#installing-using-update-packages

Kingsley Ijomah
quelle
0

Ich konnte die oben erwähnte Einstellung PATH oder SYSTEM VARIABLE entfernen, indem ich das Zertifikat als vertrauenswürdige Behörde importierte.

  1. Rufen Sie certmgr.msc auf
  2. Klicken Sie mit der rechten Maustaste auf den Ordner Trusted Root Certificate Authority.
  3. Wählen Sie "Alle Aufgaben"
  4. Wählen Sie "Importieren"
  5. Wählen Sie Alle Dateien in der Dropdown-Liste Dateityp aus und wählen Sie die Datei cacert.pem aus.
  6. Sie sollten die Meldung "Import erfolgreich" erhalten.
Charles Owen
quelle
0

Speichern Sie Ihre Datei cacert.pmp unter https://curl.haxx.se/ca/cacert.pem und fügen Sie diese Datei zum Speicherort Ihres Ruby-Installationsordners \ lib \ ruby ​​\ 2.3.0 \ rubygems \ ssl_certs hinzu

Beispiel: C: \ Ruby23 \ lib \ ruby ​​\ 2.3.0 \ rubygems \ ssl_certs

nikbe28
quelle
0

Dies hat mir geholfen: https://coderwall.com/p/ubl6iw/fix-ssl_connect-returned-1-errno-0-state-sslv3-read-server-certificate-b-certificate-verify-failed-openssl-ssl- sslerror Mein Ruby on Rails-Projekt sendet intern Daten an eine API und kann das interne Zertifikat nicht überprüfen. Diese Zeilen halfen:

require 'https'

http = Net::HTTP.new('example.com', 443)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER

http.cert_store = OpenSSL::X509::Store.new
http.cert_store.set_default_paths
http.cert_store.add_file('/path/to/internal.cert.pem')

Hoffe das kann helfen.

HoganDevelopementAddicted
quelle
0

Dieses Problem trat auch auf, als ich ältere Ruby-Versionen installierte. Als ich die neueste Ruby-Version installiert habe, ist dieses Problem behoben. Grundsätzlich musste das SSL-Zertifikat aktualisiert werden.

kishor.j
quelle
-3

Für Personen, die Schienen benutzen 4.

Fügen Sie dies in devise.rb hinzu

require "omniauth-google-oauth2"
config.omniauth :google_oauth2, "CLIENT_ID", "CLIENT_SECRET", { access_type: "offline", approval_prompt: "", :client_options => {:ssl => {:verify => false}} }
Priyanko
quelle
2
{:ssl => {:verify => false}}ist nicht die Lösung, es schafft nur ein weiteres Problem.
Oreoshake