web-dev-qa-db-de.com

OpenSSL :: SSL :: SSLError: SSL_connect zurückgegeben = 1 errno = 0 state = SSLv3-Leseserverzertifikat B: Zertifikatprüfung fehlgeschlagen

Ich habe RVM verwendet, um Ruby 1.9.3 unter Ubuntu 12.04 zu installieren

rvm pkg install openssl
rvm install 1.9.3 --with-openssl-dir=$rvm_path/usr

Und dann, wenn ich versuche, etwas wie folgt auszuführen:

require 'open-uri'
open('https://www.google.com/')

Ich erhalte die Fehlermeldung: OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

Wie löse ich das? Ich habe viele ähnliche Threads, bei denen dieses Problem in OSX auftritt, aber wie löse ich es in Ubuntu?

Danke für Ihre Hilfe.

16
aren55555

Dies geschieht manchmal, wenn das Standard-OpenSSL-Verzeichnis in der nativen OpenSSL-Bibliothek nicht korrekt festgelegt ist. open-uri verwendet OpenSSL::X509::Store#set_default_paths, um OpenSSL mitzuteilen, im OpenSSL-Verzeichnis nach der Datei zu suchen, die die vertrauenswürdigen Stammzertifikate enthält, die OpenSSL standardmäßig als vertrauenswürdig einstuft.

In Ihrem Fall schlägt diese Suche fehl. Sie können dies zum Erfolg führen, indem Sie eine Umgebungsvariable festlegen, die die Standardeinstellung überschreibt und OpenSSL anweist, stattdessen in diesem Verzeichnis zu suchen: 

export SSL_CERT_FILE=/etc/pki/tls/cert.pem

Dies ist der Standardspeicherort für das Stamm-CA-Paket auf meinem Fedora 16 64-Bit. Weitere beliebte Speicherorte sind /etc/ssl/ca-bundle.crt usw. In Ihrem Fall befindet sich die von RVM verwendete OpenSSL-Bibliothek in $ rvm_path/usr. Daher sollten Sie sich dort nach einem geeigneten Kandidaten für die Standard-CA-Stammdatei umsehen. Nachdem die Umgebungsvariable korrekt festgelegt wurde, ist der Aufruf von open-uri erfolgreich.

Um die Umgebungsvariable dauerhaft zu machen, verwenden Sie die üblichen Methoden, beispielsweise den Export in .bashrc,/etc/profile oder was auch immer in Ihre Situation passt.

25
emboss

Die Datei "cacert.pem" fehlt bei installiertem Rvm-openssl.

$ cd $rvm_path/usr/ssl
$ Sudo curl -O http://curl.haxx.se/ca/cacert.pem
$ Sudo mv cacert.pem cert.pem
10

Fügen Sie den "zertifizierten" Edelstein zu Ihrem Gemfile hinzu.

Weitere Informationen: https://rubygems.org/gems/certified

9
Meekohi

Siehe http://jjinux.blogspot.nl/2012/02/Ruby-working-around-ssl-errors-on-os-x.html - Als alternative Antwort auf Ihre Frage sollte es für beide Ubuntu funktionieren und Mac OS X-Benutzer, und es ist keine Änderung der Umgebungsvariablen erforderlich.

Die Lösung aus dem obigen Link:

# config/initializers/fix_ssl.rb
# 
# Work around errors that look like:
#
#   SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)

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

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

    def use_ssl=(flag)
      # Ubuntu
      if File.exists?('/etc/ssl/certs')
        self.ca_path = '/etc/ssl/certs'

      # MacPorts on OS X
      # You'll need to run: Sudo port install curl-ca-bundle
      elsif File.exists?('/opt/local/share/curl/curl-ca-bundle.crt')
        self.ca_file = '/opt/local/share/curl/curl-ca-bundle.crt'
      end

      self.verify_mode = OpenSSL::SSL::VERIFY_PEER
      self.original_use_ssl = flag
    end
  end
end
4
dutchstrider

Überprüfen Sie Ihre Systemuhr !!

Treten Sie diesen Fehler auf einer virtuellen Maschine nach einer langen Zeit (1 Woche) ohne Verwendung aus. Das Aktualisieren meiner Systemuhr hat das Problem sofort behoben.

Wenn Sie ntpd ausführen, erledigt ntpdate -b -u pool.ntp.org das für Sie.

0
Gavin Miller

Das hat jetzt für mich funktioniert. Dinge fingen an zu arbeiten, als ich "Brew Doctor" lief, was mich zu Hinweisen wie "unset SSL_CERT_DIR" führte.

0
Kim Miller