RVMを使用してRuby 1.9.3をUbuntu 12.04にインストールして
rvm pkg install openssl
rvm install 1.9.3 --with-openssl-dir=$rvm_path/usr
そして、私が次のように何かを実行しようとすると:
require 'open-uri'
open('https://www.google.com/')
エラーが表示されます:OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
どうすればこれを解決できますか? OSXでこの問題が発生する同様のスレッドがたくさんありますが、Ubuntuでそれを解決するにはどうすればよいですか?
ご協力いただきありがとうございます。
これは、デフォルトの「OpenSSLディレクトリ」がネイティブOpenSSLライブラリで正しく設定されていない場合に発生することがあります。 open-uriはOpenSSL::X509::Store#set_default_paths
を使用して、OpenSSLがOpenSSLディレクトリを調べ、デフォルトでOpenSSLが信頼する信頼されたルート証明書を含むファイルを探します。
あなたの場合、この検索は失敗します。デフォルトの設定を上書きし、代わりにOpenSSLにそのディレクトリを参照するように指示する環境変数を設定することで、成功させることができます。
export SSL_CERT_FILE=/etc/pki/tls/cert.pem
これは、私のFedora 16 64ビットのルートCAバンドルのデフォルトの場所です。他の一般的な場所は/etc/ssl/ca-bundle.crtなどです。この場合、RVMで使用されるOpenSSLライブラリは$ rvm_path/usrにあります。そのため、デフォルトのルートCAファイルの適切な候補を探す必要があります。環境変数が正しく設定されると、open-uriの呼び出しは成功します。
環境変数を永続的にするには、.bashrc、/ etc/profile、または状況に最適なものでエクスポートを定義するなど、通常の方法を使用します。
Cacert.pemファイルが、インストールされているRVMのopensslにありません。
$ cd $rvm_path/usr/ssl
$ Sudo curl -O http://curl.haxx.se/ca/cacert.pem
$ Sudo mv cacert.pem cert.pem
「証明された」gemをGemfileに追加します。
質問の代替回答として http://jjinux.blogspot.nl/2012/02/Ruby-working-around-ssl-errors-on-os-x.html を参照してください、それは動作するはずですUbuntuとMac OS Xの両方のユーザー向けであり、環境変数を変更する必要はありません。
上記のリンクからのソリューション:
# config/initializers/fix_ssl.rb
#
# Work around errors that look like:
#
# SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)
require 'open-uri'
require 'net/https'
module Net
class HTTP
alias_method :original_use_ssl=, :use_ssl=
def use_ssl=(flag)
# Ubuntu
if File.exists?('/etc/ssl/certs')
self.ca_path = '/etc/ssl/certs'
# MacPorts on OS X
# You'll need to run: Sudo port install curl-ca-bundle
elsif File.exists?('/opt/local/share/curl/curl-ca-bundle.crt')
self.ca_file = '/opt/local/share/curl/curl-ca-bundle.crt'
end
self.verify_mode = OpenSSL::SSL::VERIFY_PEER
self.original_use_ssl = flag
end
end
end
長期間(1週間)使用せずに仮想マシンでこのエラーに遭遇した。システムクロックを更新すると、問題はすぐに修正されました。
ntpd
を実行している場合は、ntpdate -b -u pool.ntp.org
が代わりに行います。
これでうまくいきました。 「brew doctor」を実行すると、物事が機能し始め、「unset SSL_CERT_DIR」のような手掛かりになりました