Zum Inhalt springen
ecdsa.com
BundlerPaketmanager

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

So behebst du den Fehler

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

Gesamte Signaturfehler-Datenbank durchsuchen