web-dev-qa-db-ja.com

OpenSSL :: SSL :: SSLError:SSL_connect returns = 1 errno = 0 state = SSLv3 read server certificate B:certificate verify failed

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でそれを解決するにはどうすればよいですか?

ご協力いただきありがとうございます。

16
aren55555

これは、デフォルトの「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、または状況に最適なものでエクスポートを定義するなど、通常の方法を使用します。

25
emboss

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
10

「証明された」gemをGemfileに追加します。

詳細: https://rubygems.org/gems/certified

9
Meekohi

質問の代替回答として 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
4
dutchstrider

システムクロックをチェックしてください!!

長期間(1週間)使用せずに仮想マシンでこのエラーに遭遇した。システムクロックを更新すると、問題はすぐに修正されました。

ntpdを実行している場合は、ntpdate -b -u pool.ntp.orgが代わりに行います。

0
Gavin Miller

これでうまくいきました。 「brew doctor」を実行すると、物事が機能し始め、「unset SSL_CERT_DIR」のような手掛かりになりました

0
Kim Miller