Mensaje de error
Could not verify the SSL certificate for https://gems.example.com/.
También se muestra como
- Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for https://gems.example.com/.
Bundler imprime «Retrying fetcher due to error (n/4): Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for <source>.» en cada intento, 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.». La URL de la fuente es la de tu Gemfile.
Bundler — Bundler::Fetcher::CertificateFailureError while fetching a gem source
Qué significa
Bundler no pudo verificar el certificado TLS de una fuente de gemas del Gemfile, volvió a intentarlo y se rindió. Envuelve el error de verificación de OpenSSL en Bundler::Fetcher::CertificateFailureError y añade una pista de que al sistema pueden faltarle certificados de CA. Como en Ruby en general, las CA de confianza son las del bundle de OpenSSL que usa este Ruby, salvo que el ajuste ssl_ca_cert de Bundler indique otra cosa.
Por qué ocurre
Un servidor de gemas privado con un certificado corporativo
frecuenteGemfury, Artifactory, Nexus o un servidor de gemas autoalojado cuya CA no está en el bundle que usa Ruby (habitual en las imágenes de CI).
Un proxy que inspecciona TLS delante de rubygems.org
frecuenteLa raíz del proxy es de confianza para los navegadores, a través del almacén del sistema operativo, pero no para el bundle de OpenSSL de Ruby.
Este Ruby usa su propio bundle de CA
ocasionalLas instalaciones de Ruby compiladas con el OpenSSL de Homebrew o con uno incluido, y RubyInstaller en Windows, no leen el almacén de certificados del sistema operativo.
Cómo solucionarlo
- 1.
Establecer ssl_ca_cert de Bundler
bundle config set ssl_ca_cert indica a Bundler un archivo de CA para sus descargas. En nuestra prueba, esto resolvió el error de inmediato.
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.
O establecer SSL_CERT_FILE
La variable de entorno de OpenSSL se aplica por igual a Bundler, a RubyGems y a la aplicación; haz que apunte a un bundle que también contenga las raíces 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.
Instalar la CA en el almacén que lee Ruby
Consulta OpenSSL::X509::DEFAULT_CERT_FILE para ver qué archivo de bundle es y añade allí el certificado raíz (en Debian y Ubuntu, mediante 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 en .gemrc
gem install tiene su propio ajuste con la misma finalidad.
yaml # ~/.gemrc — the same CA for "gem install" :ssl_ca_cert: /etc/ssl/private-ca/corp-root-ca.pem
Errores relacionados
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