Aller au contenu
ecdsa.com
BundlerGestionnaires de paquets

Message d’erreur

Could not verify the SSL certificate for https://gems.example.com/.

Également affiché sous la forme

  • Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for https://gems.example.com/.

À chaque tentative, Bundler affiche « Retrying fetcher due to error (n/4): Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for <source>. », suivi de « 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. » L’URL de la source est celle de votre Gemfile.

Bundler — Bundler::Fetcher::CertificateFailureError while fetching a gem source

Ce que cela signifie

Bundler n’a pas pu vérifier le certificat TLS d’une source de gems du Gemfile ; il a réessayé, puis abandonné. Il enveloppe l’erreur de vérification d’OpenSSL dans Bundler::Fetcher::CertificateFailureError et ajoute une indication selon laquelle le système manque peut-être de certificats d’AC. Comme pour Ruby en général, les AC approuvées sont celles du fichier d’AC de l’OpenSSL qu’utilise ce Ruby, sauf si le paramètre ssl_ca_cert de Bundler en dispose autrement.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Définir le paramètre ssl_ca_cert de Bundler

    bundle config set ssl_ca_cert indique à Bundler un fichier d’AC pour ses téléchargements. Lors de notre test, cela a immédiatement résolu l’erreur.

    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.

    Ou définir SSL_CERT_FILE

    Cette variable d’environnement d’OpenSSL s’applique aussi bien à Bundler qu’à RubyGems et à l’application ; faites-la pointer vers un fichier d’AC qui contient aussi les racines publiques.

    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.

    Installer l’AC dans le magasin que lit Ruby

    Consultez OpenSSL::X509::DEFAULT_CERT_FILE pour savoir de quel fichier d’AC il s’agit, puis ajoutez-y la racine (sous Debian et Ubuntu, avec 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 : le paramètre :ssl_ca_cert dans .gemrc

    gem install dispose de son propre paramètre, qui joue le même rôle.

    yaml
    # ~/.gemrc — the same CA for "gem install"
    :ssl_ca_cert: /etc/ssl/private-ca/corp-root-ca.pem

Erreurs associées

Parcourir toute la base de données des erreurs de signature