Ruby Net :: HTTP antwortet mit OpenSSL :: SSL :: SSLError "Zertifikatsüberprüfung fehlgeschlagen" nach Zertifikatserneuerung

Wir haben kürzlich das SSL-Zertifikat unserer Site erneuert. Unter Mac OS El Capitan 10.11.3 tritt Folgendes auf:

require 'net/http'

Net::HTTP.get URI('https://www.google.com')
# => "<HTML>...</HTML>"

# The site whose certificate got renewed
Net::HTTP.get URI('https://www.example.com')
# => OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed

Alle meine Suchanfragen bei Google und StackOverflow enthalten Antworten, die auf ein Problem mit der Ruby-Installation hinweisen. Sie scheinen jedoch mit älteren Ruby-Versionen in Zusammenhang zu stehen, und ich glaube nicht, dass dies hier der Fall ist. Folgendes habe ich versucht:

brew updatebrew upgrade opensslrvm osx-ssl-certs update allrvm install ruby-2.3.1 --disable-binary --with-openssl-dir="$(brew --prefix openssl)" (Ich hatte diese Version vorher nicht)rvm requirementscrlrefresh rpv, um den systemweiten CRL-Cache von OSX zu leeren, wie von Usbekjon vorgeschlagen.

Wie kann ich das beheben?

Anmerkungen

Das Problem tritt bei einem frisch installierten Linux Docker-Container mit Ruby 2.2.3 nicht auf. Vielleicht hat das etwas mit Mac OS oder lokalem SSL-Caching zu tun.Dieses Problem bestand möglicherweise vor der Erneuerung des Zertifikats. Ich kann es nicht genau wissen. Die Erneuerung verursachte jedoch ein ähnliches Problem mit einem Drittanbieter, den wir verwenden, wie in @ beschriebediese Frag.Die Zertifikatinstallation wurde von Namecheap auf Richtigkeit überprüft. Online-Überprüfungen zeigen, dass alles funktioniert, und alle gängigen Browser zeigen, dass das Zertifikat gültig ist.Lösun

Mit viel Hilfe von BoraMa ist jetzt klar, was passiert ist. COMODO hat eine neue Wurzel namens @ hinzugefüCOMODO RSA Certification Authority anstelle des vorherigenCOMODO Certification Authority. Das neue Stammverzeichnis wurde nicht im Mac-Schlüsselbund registriert, was zu diesem Problem führte.

uf eine Art und Weise haben wir versucht, dies zu debuggen, indem wir Folgendes ausgeführt haben:

openssl s_client -connect www.mysite.com:443

Welche eine Warnung zeigteverify error:num=20:unable to get local issuer certificate. Diese Warnung ist kein Problem, daopenssl s_client verwendet standardmäßig keine Zertifikate. Durch Ausführen der folgenden Befehle konnte die Warnung nach dem Herunterladen des Zertifikats verhindert werden:von COMODOincomodo.pem (IndexHie):

openssl s_client -connect www.mysite.com:443 -CAfile comodo.pem

Dies konnte und hatte jedoch keine Auswirkungen auf die Ruby OpenSSL-Oberfläche.Dieser Artike hat die Dinge für mich viel klarer gemacht, und dieSSL Doktorskriptas von seinem Autor erstellte @ war ebenfalls hilfreich, da es die Hypothese bestätigte. Der Artikel schlug vor, sich @ anzuschauOpenSSL::X509::DEFAULT_CERT_FILE, das war für mich/usr/local/etc/openssl/cert.pem. Diese Datei war auf meinem Computer nicht vorhanden, was bedeutete, dass Apples Patch für OpendSSL die Keychain-App verwendete. Aus irgendeinem Grund wird beim Importieren voncomodo.pem in meinen Schlüsselbund und markiere ihn als vertrauenswürdig basierend aufdieser Beitra funktioniert nicht

So war die Lösung, das @ zu erstellcert.pem Datei manuell. Ich ging zur Schlüsselbund-App und exportierte alle Systemstammzertifikate nachsystem_root.pem. Dann:cat system_root.pem comodo.pem > cert.pem und Verschieben dieser Datei nach/usr/local/etc/openssl/ hat den Trick gemacht. LaufenNet::HTTP.get in Ruby ist nicht mehr fehlgeschlagen.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage