Fehlermeldung
Could not verify the SSL certificate for https://gems.example.com/.
Auch ausgegeben als
- Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for https://gems.example.com/.
Bundler gibt bei jedem Versuch „Retrying fetcher due to error (n/4): Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for <source>.“ aus, gefolgt von „There is a chance you are experiencing a man-in-the-middle attack, but most likely your system doesn't have the CA certificates needed for verification.“ Die Quell-URL ist die aus deinem Gemfile.
Bundler — Bundler::Fetcher::CertificateFailureError while fetching a gem source
Was der Fehler bedeutet
Bundler konnte das TLS-Zertifikat einer Gem-Quelle aus dem Gemfile nicht prüfen, hat es erneut versucht und dann aufgegeben. Bundler verpackt den Fehler der OpenSSL-Prüfung in Bundler::Fetcher::CertificateFailureError und fügt den Hinweis an, dass dem System möglicherweise CA-Zertifikate fehlen. Wie bei Ruby allgemein sind die vertrauenswürdigen CAs die des OpenSSL-Bundles, das dieses Ruby verwendet, sofern die Bundler-Einstellung ssl_ca_cert nichts anderes festlegt.
Warum der Fehler auftritt
Ein privater Gem-Server mit Firmenzertifikat
häufigGemfury, Artifactory, Nexus oder ein selbst gehosteter Gem-Server, dessen CA nicht in dem Bundle enthalten ist, das Ruby verwendet (häufig in CI-Images).
Ein Proxy mit TLS-Inspektion vor rubygems.org
häufigBrowser vertrauen dem Root-Zertifikat des Proxys über den Zertifikatsspeicher des Betriebssystems, das OpenSSL-Bundle von Ruby dagegen nicht.
Dieses Ruby verwendet ein eigenes CA-Bundle
gelegentlichRuby-Installationen, die gegen das OpenSSL von Homebrew oder ein mitgeliefertes OpenSSL gebaut wurden, sowie RubyInstaller unter Windows lesen den Zertifikatsspeicher des Betriebssystems nicht.
So behebst du den Fehler
- 1.
Bundler-Einstellung ssl_ca_cert setzen
bundle config set ssl_ca_cert lässt Bundler für seine Abrufe eine CA-Datei verwenden. In unserem Test hat das den Fehler sofort behoben.
bash # Trust a CA for Bundler (stored in .bundle/config; --global for ~/.bundle/config) bundle config set --local ssl_ca_cert /etc/ssl/private-ca/corp-root-ca.pem bundle install - 2.
Oder SSL_CERT_FILE setzen
Die Umgebungsvariable von OpenSSL gilt für Bundler, RubyGems und die Anwendung gleichermaßen; lass sie auf ein Bundle zeigen, das auch die öffentlichen Root-Zertifikate enthält.
bash # Or for the whole process (Bundler, RubyGems and Net::HTTP) SSL_CERT_FILE=/etc/ssl/private-ca/corp-ca-bundle.pem bundle install - 3.
CA im Zertifikatsspeicher installieren, den Ruby liest
Sieh in OpenSSL::X509::DEFAULT_CERT_FILE nach, welches Bundle das ist, und füge das Root-Zertifikat dort hinzu (unter Debian und Ubuntu über update-ca-certificates).
bash sudo cp corp-root-ca.pem /usr/local/share/ca-certificates/corp-root-ca.crt && sudo update-ca-certificates ruby -ropenssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE' # the bundle this Ruby reads - 4.
RubyGems: :ssl_ca_cert in der .gemrc
gem install hat eine eigene Einstellung mit demselben Zweck.
yaml # ~/.gemrc — the same CA for "gem install" :ssl_ca_cert: /etc/ssl/private-ca/corp-root-ca.pem
Verwandte Fehler
state=error: certificate verify failed (unable to get local issuer certificate)Ruby openssl (Net::HTTP, Faraday, HTTParty, RubyGems)state=error: certificate verify failed (self-signed certificate in certificate…Ruby openssl (Net::HTTP, Faraday, RubyGems)npm error code UNABLE_TO_GET_ISSUER_CERT_LOCALLYnpm (Node.js)There was a problem confirming the ssl certificate: [SSL: CERTIFICATE_VERIFY_FA…pip