本文へスキップ
ecdsa.com
Bundlerパッケージマネージャー

エラーメッセージ

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

別の表記

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

Bundler は試行のたびに「Retrying fetcher due to error (n/4): Bundler::Fetcher::CertificateFailureError Could not verify the SSL certificate for <source>.」と出力し、続けて「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.」と出力します。ソースの URL は Gemfile に記載されたものです。

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

このエラーの意味

Bundler は Gemfile に記載された gem ソースの TLS 証明書を検証できず、再試行したうえで処理を断念しました。Bundler は OpenSSL の検証エラーを Bundler::Fetcher::CertificateFailureError でラップし、システムに CA 証明書が不足している可能性があるというヒントを付け加えます。Ruby 全般と同じく、信頼される CA は、Bundler の ssl_ca_cert 設定で別の指定をしない限り、この Ruby が使う OpenSSL のバンドルに含まれる CA です。

発生する理由

修正方法

  1. 1.

    Bundler の ssl_ca_cert を設定する

    bundle config set ssl_ca_cert で、Bundler が取得処理に使う CA ファイルを設定します。ecdsa.com のテストでは、これでエラーがすぐに解消しました。

    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.

    または SSL_CERT_FILE を設定する

    この OpenSSL の環境変数は、Bundler、RubyGems、アプリケーションのいずれにも同じように適用されます。公開ルートも含むバンドルを指定してください。

    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.

    Ruby が読み込むストアに CA をインストールする

    OpenSSL::X509::DEFAULT_CERT_FILE を確認してそれがどのバンドルかを調べ、そこにルートを追加してください(Debian と Ubuntu では 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:.gemrc の :ssl_ca_cert

    gem install には、同じ目的を持つ独自の設定があります。

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

関連するエラー

署名エラーデータベースをすべて見る