サードパーティのログインに Authlogic-Connect を使用しています。適切な移行を実行した後、Twitter/Google/yahooログインはうまく機能しているように見えますが、Facebookログインは例外をスローします。
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
開発ログに表示される
OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed):
app/controllers/users_controller.rb:37:in `update'
提案してください..
Rails 3にJQueryジェネレーターを使用しようとしたときにも、同様の問題が発生しました。
私はこのように解決しました:
CURL Certificate Authority(CA)バンドルを取得します。これを行うことができます。
Sudo port install curl-ca-bundle
[あなたがMacPortsを使っているならば]wget http://curl.haxx.se/ca/cacert.pem
SSL認証を検証しようとしているRubyコードを実行します:SSL_CERT_FILE=/opt/local/etc/certs/cacert.pem Rails generate jquery:install
。あなたのケースでは、サーバがそれを拾うところのどこかに環境変数としてこれをセットするか、あなたのenvironment.rbファイルの中にENV['SSL_CERT_FILE'] = /path/to/your/new/cacert.pem
のような何かを追加したいです。
CAファイルを(私はこれを試したことがない)OSにインストールすることもできます - ここには長い指示 があります - これは同じように動作するはずですが、私はしていません個人的にこれを試してみました。
基本的に、あなたが当たっている問題はいくつかのWebサービスがOpenSSLが検証できないCAに対して署名された証明書で応答しているということです。
OS XでRVMを使用している場合は、おそらくこれを実行する必要があります。
rvm osx-ssl-certs update all
ここでより多くの情報: http://rvm.io/support/fixing-broken-ssl-certificates
そしてここに完全な説明があります: https://github.com/wayneeseguin/rvm/blob/master/help/osx-ssl-certs.md
Ruby 2.2では、これを修正するためにソースからRubyを再インストールする必要があるかもしれません。方法は次のとおりです(2.2.3
をご使用のRubyバージョンに置き換えます)。
rvm reinstall 2.2.3 --disable-binary
https://stackoverflow.com/a/32363597/4353 および Ian Connor の功績による。
Windows上で修正する方法は次のとおりです。 https://Gist.github.com/867550 (Fletcher Nichol作成)
抜粋:
手動のやり方(つまらない)
cacert.pem
ファイルを http://curl.haxx.se/ca/cacert.pem からダウンロードしてください。このファイルをC:\RailsInstaller\cacert.pem
に保存します。
SSL_CERT_FILE
を設定してRubyにあなたの認証局バンドルを知らせましょう。現在のコマンドプロンプトセッションでこれを設定するには、次のように入力します。set SSL_CERT_FILE=C:\RailsInstaller\cacert.pem
これを恒久的な設定にするには、これを コントロールパネル に追加します。
Rubyは信頼するルート証明書を見つけることができません。
このブログ記事で解決策を見てください。「 Ruby 1.9とSSLエラー 」。
解決策は、Firefoxで使用されているものと同じルート証明書を含む
curl-ca-bundle
ポートをインストールすることです。Sudo port install curl-ca-bundle
そして
https
オブジェクトにそれを使うように伝えます:https.ca_file = '/opt/local/share/curl/curl-ca-bundle.crt'
コードをUbuntu上で実行したい場合は、代わりに
ca_path
属性をデフォルトの証明書の場所/etc/ssl/certs
に設定する必要があります。
OSXでこのエラーが発生するのは、rvmがインストールされたRubyです。
OSXでこの問題に遭遇した場合、このブログ記事でそれについての非常に広い説明を見つけることができます。
http://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html
簡潔に言うと、Rubyのいくつかのバージョンでは、RVMはコンパイル済みのバイナリをダウンロードします。これは、間違った場所にある証明書を探します。 RVMにソースのダウンロードと自分のマシンでのコンパイルを強制することで、証明書の場所の設定が正しいことを確認します。
これを行うためのコマンドは次のとおりです。
rvm install 2.2.0 --disable-binary
あなたがすでに問題のバージョンを持っているならば、あなたはそれを再インストールすることができます:
rvm reinstall 2.2.0 --disable-binary
(明らかに、あなたのRubyバージョンを必要に応じて置き換えてください)。
問題は、Rubyが信頼するルート証明書を見つけられないことです。 1.9以降、Rubyはこれをチェックします。あなたはあなたがpemファイルの形式であなたのシステム上のcurl証明書を持っていることを確認する必要があるでしょう。また、証明書がRubyが期待する場所にあることを確認する必要があります。あなたはこの証明書を入手することができます...
http://curl.haxx.se/ca/cacert.pem
RVMとOSXのユーザーであれば、証明書ファイルの場所はRubyのどのバージョンを使用しているかによって異なります。明示的に:ca_pathを使用してパスを設定することは、コードが本番環境に移行したときに移植性がなくなるため、悪い考えです。 Rubyにデフォルトの場所に証明書を渡したい(そしてあなたの開発者が彼らが何をしているのか知っていると仮定してください)。 dtrussを使用して、システムが証明書ファイルを探す場所を特定することができます。
私の場合、システムは証明書ファイルを探していました。
/Users/stewart.matheson/.rvm/usr/ssl/cert.pem
しかしMACOSXシステムでは証明書が必要です。
/System/Library/OpenSSL/cert.pem
ダウンロードした証明書をこのパスにコピーしたところ、うまくいきました。 HTH
新しい認定宝石は、これを修正するように設計されています。
Gemファイルにgem 'certified'を追加してbundle installを実行するだけです。
最新のmacportを搭載したMac OS X Lionの場合
Sudo port install curl-ca-bundle
export SSL_CERT_FILE=/opt/local/share/curl/curl-ca-bundle.crt
その後、失敗したジョブを再実行してください。
Eric Gが5月12日に回答してから、certファイルの場所が変更されたようです。
ワンライナーは管理者プロンプトでWindows用にそれを修正
choco install wget
(最初に chocolatey.org を参照)
wget http://curl.haxx.se/ca/cacert.pem -O C:\cacert.pem && setx /M SSL_CERT_FILE "C:\cacert.pem"
または単にこれを行います。
gem sources -r https://rubygems.org/
gem sources -a http://rubygems.org/
Milanioの方法:
gem sources -r https://rubygems.org
gem sources -a http://rubygems.org
gem update --system
gem sources -r http://rubygems.org
gem sources -a https://rubygems.org
gem install [NAME_OF_GEM]
まあこれは私のために働いた
rvm pkg install openssl
rvm reinstall 1.9.2 --with-openssl-dir=$rvm_path/usr
私のubuntu 12.04のopenssl実装に何か問題があります
私はbrew
と一緒にcurl-ca-bundle
をインストールしようとしました、しかし、パッケージはもう利用できません:
$ brew install curl-ca-bundle
Error: No available formula for curl-ca-bundle
Searching formulae...
Searching taps...
Mac上で私に働いた解決策は次のとおりです。
$ cd /usr/local/etc/openssl/certs/
$ Sudo curl -O http://curl.haxx.se/ca/cacert.pem
この行を~/.bash_profile
(またはzshの場合は~/.zshrc
)に追加します。
export SSL_CERT_FILE=/usr/local/etc/openssl/certs/cacert.pem
それから端末を更新します。
$ source ~/.bash_profile
これはデバッグ目的のための別のオプションです。
そもそもSSLを使うことの利点を否定するので、いかなる本番環境でも絶対に使わないでください。あなたの地域の開発環境でこれを実行することが唯一の有効です。
require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
これはどちらかというと足りない解決策であることを知っている間、私はいまだにこれを共有しています。なぜならここで答えるのはごく少数の人がWindowsを使うからです。シンプルで直感的なアプローチをお願いします。
require 'openssl'
puts OpenSSL::X509::DEFAULT_CERT_FILE
それはあなたのopensslがどこにcertファイルを探しているかを伝えます。私の名前はLuisではありませんが、私の名前はC:/Users/Luis/Code/luislavena/knap-build/var/knapsack/software/x86-windows/openssl/1.0.0l/ssl/cert.pem
です。パスはそれぞれの環境によって異なる場合があります(例:openknapsack
の代わりにluislavena
)。
コンソールからset SSL_CERT_FILE=C:\foo\bar\baz\cert.pem
を実行してもパスが変わらなかったので、ローカルディスクにC:\Users\Luis\Code\luislavena\knap-build\var\knapsack\software\x86-windows\openssl\1.0.0l\ssl
というディレクトリを作成し、そこにcertファイルを置きました。
それがそのままだと、これはきっとうまくいくでしょう。
私はRubyプロジェクトに取り組んでいる間、これと同じ問題を抱えていました。私はWindows 7 64bitを使用しています。
私はこれを解決しました:
自作を使ったOS X 10.8.x:
brew install curl-ca-bundle
brew list curl-ca-bundle
cp /usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt /usr/local/etc/openssl/cert.pem
私のために働いた最も直接的な答えはこれでした
Sudo apt-get install openssl ca-certificates
そして大丈夫!
私はこの問題に遭遇し、私がOSXのRVMユーザーであるにもかかわらず提案されたrvm osx-ssl-certs update all
の修正は機能しませんでした。
私のために働いた修正はopensslの最新版を再インストールすることでした:
brew update
brew remove openssl
brew install openssl
ターミナルでこれを実行することでこの問題を解決しました。全文はこちら から入手できます
rvm install 2.2.0 --disable-binary
それから、このブログ記事が示唆するように、
「 Net :: HTTPの危険なデフォルトHTTPS動作を修復する方法 」
always_verify_ssl_certificates
のデフォルト値を設定できるようにするca_file
gemをインストールすることをお勧めします。
これは私のために働きました。あなたがrvmとbrewを使っているならば:
rvm remove 1.9.3
brew install openssl
rvm install 1.9.3 --with-openssl-dir=`brew --prefix openssl`
Railsアプリをローカルで実行している場合は、この行をapplication.rbの最後に追加してください。
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
この後は、問題なくアプリを使用できます。あなたはそれをハックと呼ぶかもしれませんがお勧めできません。ローカルで実行する必要がある場合にのみ使用してください
OSXソリューション:
最新のrvm stableバージョンをインストールする
rvm get stable
証明書を自動的に解決するには、rvmコマンドを使用します。
rvm osx-ssl-certs update all
Cert.pemを指している/ usr/local/etc/opensslにシンボリックリンクがある場合は、これを試してください。
Ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE" (should be /usr/local/etc/openssl)
cd /usr/local/etc/openssl
wget http://curl.haxx.se/ca/cacert.pem
ln -s cacert.pem 77ee3751.0 (77ee3751.0 is my symbolic link, should depend on the openssl version)
命令が私のために働いたもののためにわずかに異なっていたという理由だけで、私は私が私の2セントを加えると思いました:
私はOS X Lionを使っていて、macportsとrvmを使っています
私はcurl-ca-bundleをインストールしました:
Sudo port install curl-ca-bundle
それから私はこれになるように私のomniauth設定を調整しました:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :google_oauth2, APP_CONFIG['CONSUMER_KEY'], APP_CONFIG['CONSUMER_SECRET'],
:scope => 'https://www.google.com/m8/feeds https://www.googleapis.com/auth/userinfo.profile',
:ssl => {:ca_path => "/share/curl/curl-ca-bundle.crt"}
end
私にとってうまくいったのは、答えの組み合わせです。
# Reinstall OpenSSL
brew update
brew remove openssl
brew install openssl
# Download CURL CA bundle
cd /usr/local/etc/openssl/certs
wget http://curl.haxx.se/ca/cacert.pem
/usr/local/opt/openssl/bin/c_rehash
# Reinstall Ruby from source
rvm reinstall 2.2.3 --disable-binary
あなたがLeopardで特に問題を抱えているならば、これは私が助けたことです。
私の証明書は古く、更新する必要があります。私はこれをダウンロードしました:
http://curl.haxx.se/ca/cacert.pem
それからLeopardでここで見つかった私の証明書を置き換えました:
/usr/share/curl/curl-ca-bundle.crt
アクセスしているものは何でもリロードしてください。
最新のrubygem-update-2.6.7でこの問題は解決しました。 http://guides.rubygems.org/ssl-certificate-update/
私はRubyを再インストールしなければなりませんでした。 Ubuntuとrbenvを使用している場合は、これで解決するはずです。
rbenv uninstall your_version
# install dependencies
Sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev
# install Ruby with patch
curl -fsSL https://Gist.github.com/mislav/055441129184a1512bb5.txt | \
rbenv install --patch your_version
詳しくは、 rbenv Wiki を参照してください。
私のGemfile
にgem 'certified', '~> 1.0'
を追加してbundle
を実行すると、この問題は解決しました。
certified-update
実行可能ファイルを実行するだけで、このコマンドはすべての証明書が最新のものであることを確認します。
これはWindowsの私のRuby on Railsアプリケーションではうまくいきました。
Ruby 2.3.4でこの問題を抱えている:
OpenSSLをアンインストールして再インストールすることで解決しました。私は走った:
brew uninstall --ignore-dependencies openssl
それから
brew install openssl
それは仕事をしました。
MAC OSXでrvmの問題であるとは限らないこともありますが、.rvmを削除しても問題が解決しない場合(特にtimemachineからデータをバックアップしているとき).
1.brew update
2.brew install openssl
私は何日もの間トラブルを抱えていて、そしてハッキングしていました。 このリンク は私にとって非常に役に立つことがわかりました。それは私がMAC OS X 9でSSLのアップグレードを成功させるのを助けました。
これをgemfileに追加してください。
gem 'cliver', :git => 'git://github.com/yaauie/cliver', :ref => '5617ce'
これは壊れた/無効なSSL証明書の問題である可能性があります。 Macでは、このコマンドを使用してSSL証明書を更新できます。
rvm osx-ssl-certs update all
Ubuntuに次のパッケージをインストールすることで問題が解決しました
Sudo apt-get install libssl-dev