Pular para o conteúdo
ecdsa.com
BundlerGerenciadores de pacotes

Mensagem de erro

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

Também aparece como

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

O Bundler imprime “Retrying fetcher due to error (n/4): Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for <source>.” a cada tentativa, seguido 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.” A URL da fonte é a do seu Gemfile.

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

O que significa

O Bundler não conseguiu verificar o certificado TLS de uma fonte de gems do Gemfile, tentou de novo e desistiu. Ele encapsula o erro de verificação do OpenSSL em Bundler::Fetcher::CertificateFailureError e acrescenta uma dica de que o sistema pode não ter os certificados de CA. Como no Ruby em geral, as CAs confiáveis são as do bundle do OpenSSL que este Ruby usa, a menos que a configuração ssl_ca_cert do Bundler diga outra coisa.

Por que acontece

Como corrigir

  1. 1.

    Definir o ssl_ca_cert do Bundler

    bundle config set ssl_ca_cert aponta o Bundler para um arquivo de CAs nas requisições que ele faz. No nosso teste, isso resolveu o erro na hora.

    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 definir SSL_CERT_FILE

    Essa variável de ambiente do OpenSSL vale igualmente para o Bundler, o RubyGems e o aplicativo; aponte-a para um bundle que também contenha as raízes públicas.

    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.

    Instalar a CA no repositório que o Ruby lê

    Consulte OpenSSL::X509::DEFAULT_CERT_FILE para ver qual bundle é esse e adicione a raiz nele (no Debian e no Ubuntu, com 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 no .gemrc

    O gem install tem uma configuração própria com a mesma finalidade.

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

Erros relacionados

Ver toda a base de erros de assinatura