web-dev-qa-db-ja.com

SSL_connectが返信された= 1 errno = 0状態= SSLv3サーバー証明書の読みとりB:証明書の検証に失敗した

サードパーティのログインに 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'

提案してください..

278
Vikash

Rails 3にJQueryジェネレーターを使用しようとしたときにも、同様の問題が発生しました。

私はこのように解決しました:

  1. CURL Certificate Authority(CA)バンドルを取得します。これを行うことができます。

    • Sudo port install curl-ca-bundle [あなたがMacPortsを使っているならば]
    • または直接引き下げてくださいwget http://curl.haxx.se/ca/cacert.pem
  2. 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に対して署名された証明書で応答しているということです。

135
Erik G.

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 の功績による。

134
htanata

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

これを恒久的な設定にするには、これを コントロールパネル に追加します。

129
ryanjones

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に設定する必要があります。

31
martoche

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バージョンを必要に応じて置き換えてください)。

24
paulmorar

問題は、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

20
Stewart

新しい認定宝石は、これを修正するように設計されています。

https://github.com/stevegraham/certified

19
Kevin

Gemファイルにgem 'certified'を追加してbundle installを実行するだけです。

  1. gem '認証済み'
  2. バンドルインストール
18
Nitish Kumar

最新の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ファイルの場所が変更されたようです。

17
Mike

ワンライナーは管理者プロンプトで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]
14
Jonathan

まあこれは私のために働いた

rvm pkg install openssl
rvm reinstall 1.9.2 --with-openssl-dir=$rvm_path/usr

私のubuntu 12.04のopenssl実装に何か問題があります

13
ramasamy

私は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
12
monteirobrena

これはデバッグ目的のための別のオプションです。

そもそもSSLを使うことの利点を否定するので、いかなる本番環境でも絶対に使わないでください。あなたの地域の開発環境でこれを実行することが唯一の有効です。

require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
12
Scott

これはどちらかというと足りない解決策であることを知っている間、私はいまだにこれを共有しています。なぜならここで答えるのはごく少数の人が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ファイルを置きました。

それがそのままだと、これはきっとうまくいくでしょう。

12
Quv

私はRubyプロジェクトに取り組んでいる間、これと同じ問題を抱えていました。私はWindows 7 64bitを使用しています。

私はこれを解決しました:

  1. http://curl.haxx.se/ca/cacert.pem からcacert.pemファイルをダウンロードしています。
  2. そのファイルをC:/RubyCertificates/cacert.pemに保存しました
  3. それから私の環境変数 "SSL_CERT_FILE"を "C:\ RubyCertificates\cacert.pem"に設定します

ソース: https://Gist.github.com/fnichol/867550

10
Henry

自作を使った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
7
Synthesis

私のために働いた最も直接的な答えはこれでした

Sudo apt-get install openssl ca-certificates

そして大丈夫!

7
Pratik Bothra

私はこの問題に遭遇し、私がOSXのRVMユーザーであるにもかかわらず提案されたrvm osx-ssl-certs update allの修正は機能しませんでした。

私のために働いた修正はopensslの最新版を再インストールすることでした:

brew update
brew remove openssl
brew install openssl
4
Dave Brace

ターミナルでこれを実行することでこの問題を解決しました。全文はこちら から入手できます

rvm install 2.2.0 --disable-binary
4
Wraithseeker

それから、このブログ記事が示唆するように、

Net :: HTTPの危険なデフォルトHTTPS動作を修復する方法

always_verify_ssl_certificatesのデフォルト値を設定できるようにするca_file gemをインストールすることをお勧めします。

4
martoche

これは私のために働きました。あなたがrvmとbrewを使っているならば:

rvm remove 1.9.3
brew install openssl
rvm install 1.9.3 --with-openssl-dir=`brew --prefix openssl`
4
Rahul

Railsアプリをローカルで実行している場合は、この行をapplication.rbの最後に追加してください。

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

この後は、問題なくアプリを使用できます。あなたはそれをハックと呼ぶかもしれませんがお勧めできません。ローカルで実行する必要がある場合にのみ使用してください

3
Tarun Rathi

OSXソリューション:

最新のrvm stableバージョンをインストールする

rvm get stable

証明書を自動的に解決するには、rvmコマンドを使用します。

rvm osx-ssl-certs update all
3
Alston

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

命令が私のために働いたもののためにわずかに異なっていたという理由だけで、私は私が私の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
2
Hortitude

私にとってうまくいったのは、答えの組み合わせです。

# 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
2
suda

あなたがLeopardで特に問題を抱えているならば、これは私が助けたことです。

私の証明書は古く、更新する必要があります。私はこれをダウンロードしました:

http://curl.haxx.se/ca/cacert.pem

それからLeopardでここで見つかった私の証明書を置き換えました:

/usr/share/curl/curl-ca-bundle.crt

アクセスしているものは何でもリロードしてください。

2
Musicalmindz

最新のrubygem-update-2.6.7でこの問題は解決しました。 http://guides.rubygems.org/ssl-certificate-update/

1
singh2005

私は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 を参照してください。

1
ndnenkov

私のGemfilegem 'certified', '~> 1.0'を追加してbundleを実行すると、この問題は解決しました。

1
user2573222

certified-update実行可能ファイルを実行するだけで、このコマンドはすべての証明書が最新のものであることを確認します。

これはWindowsの私のRuby on Railsアプリケーションではうまくいきました。

1
Saurin Parikh

Ruby 2.3.4でこの問題を抱えている:

OpenSSLをアンインストールして再インストールすることで解決しました。私は走った:

brew uninstall --ignore-dependencies openssl

それから

brew install openssl

それは仕事をしました。

1
Jules Corb

MAC OSXでrvmの問題であるとは限らないこともありますが、.rvmを削除しても問題が解決しない場合(特にtimemachineからデータをバックアップしているとき).

1.brew update
2.brew install openssl
1
Albert.Qing

私は何日もの間トラブルを抱えていて、そしてハッキングしていました。 このリンク は私にとって非常に役に立つことがわかりました。それは私がMAC OS X 9でSSLのアップグレードを成功させるのを助けました。

1
PackedUp

これをgemfileに追加してください。

gem 'cliver', :git => 'git://github.com/yaauie/cliver', :ref => '5617ce'

0
Jesse Farmer

これは壊れた/無効なSSL証明書の問題である可能性があります。 Macでは、このコマンドを使用してSSL証明書を更新できます。

rvm osx-ssl-certs update all
0
abcd_win

Ubuntuに次のパッケージをインストールすることで問題が解決しました

Sudo apt-get install libssl-dev

0
bruckerrlb