Ruby 1.9.3 使用時の「証明書の検証に失敗しました」という OpenSSL エラー
概要
Mac OS 10.6.8 (rvm を使用してインストール) で Ruby 1.9.3p0 を使用しています。 GitHub でホストされているアプリケーション テンプレートを使用して新しい Rails アプリケーションを作成しようとすると、次のようになります (たとえば)。
$ rails new myapp -m https://github.com/RailsApps/rails3-application-templates/raw/master/rails3-mongoid-devise-template.rb -T -O
次のエラー メッセージが表示されます。
/Users/me/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/http.rb:799:in `connect': SSL_connect
returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
(OpenSSL::SSL::SSLError)
Ruby 言語インタープリターが OpenSSL を使用して GitHub に接続し、アプリケーション テンプレート ファイルをリクエストしていることを理解しています。 GitHub では、すべての接続に SSL を使用する必要があります。 OpenSSL がサーバー証明書を検証できなかったため、接続は失敗しました。
証明書ファイルをダウンロードすることで問題を解決できました。
$ cd /opt/local/etc/openssl
$ sudo curl -O http://curl.haxx.se/ca/cacert.pem
$ sudo mv cacert.pem cert.pem
Ruby 1.9.2を使用しても問題ありませんでした。 Ruby 1.9.3 で「証明書の検証に失敗しました」という問題が発生するのはなぜですか?これは Ruby 1.9.3 のバグですか? Mac OS 10.6.8 に特有のものですか?私の解決策はこれを解決する正しい方法でしょうか?
解決策
正解には多くの可動部分が関係します。 OS、Rubyのバージョン、OpenSSLのバージョン、Rubygemsのバージョンによって異なります。調べた結果記事を書きました。私の記事では、エラーの理由を説明し、さらに診断するための手順を示し、いくつかの回避策を示し、考えられる解決策を提案します。これは役に立ちます:
OpenSSL エラーと Rails – 証明書の検証に失敗しました
GitHub 上の関連するコミットと問題へのリンクもあります。