(参考:railscast#241のTwitter Omniauthをフォローしています。Twitterを正常に使用し、現在Facebookにアクセスしています)
Omniauthを使用してFacebookにログインするとすぐに、次のエラーが表示されます。
Faraday::Error::ConnectionFailed
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
これは何を意味するのでしょうか?
これは私のコードです
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, '<key from fb>', '<another key from fb>'
end
実際には私のコードにはあまり何もありません、私が持っているのは、request.envの中にあるものを見るためにto_yamlを使用したいsessionControllerです
class SessionsController < ApplicationController
def create
raise request.env["omniauth.auth"].to_yaml
end
end
ファラデーエラーを解決するにはどうすればよいですか?
Ruby=信頼するルート証明書が見つからないため、このエラーが発生しています。
Windowsの修正: https://Gist.github.com/86755
Apple/Linuxの修正: http://martinottenwaelter.fr/2010/12/Ruby19-and-the-ssl-error/ <-このサイトは現在ダウンしています。
上記のサイトによるApple/Linuxの修正は次のとおりです:
解決策は、Firefoxで使用されるのと同じルート証明書を含むcurl-ca-bundleポートをインストールすることです。
Sudo port install curl-ca-bundle
httpsオブジェクトに使用するように指示します。
https.ca_file = '/opt/local/share/curl/curl-ca-bundle.crt'
コードをUbuntuで実行する場合は、代わりにデフォルトの証明書の場所/ etc/ssl/certsを使用してca_path属性を設定する必要があります。
最終的に、それがMac OS XとUbuntuの両方で機能します。
require 'net/https'
https = Net::HTTP.new('encrypted.google.com', 443)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
https.ca_path = '/etc/ssl/certs' if File.exists?('/etc/ssl/certs') # Ubuntu
https.ca_file = '/opt/local/share/curl/curl-ca-bundle.crt' if File.exists('/opt/local/share/curl/curl-ca-bundle.crt') # Mac OS X
https.request_get('/')
このソリューションを使用して、Mac OS X Lion 10.7.4でこれを修正しました。
$ rvm remove 1.9.3 (or whatever version of Ruby you are using)
$ rvm pkg install openssl
$ rvm install 1.9.3 --with-openssl-dir=$rvm_path/usr
この後、不足しているcacert.pemファイルをダウンロードする必要があります。
$ cd $rvm_path/usr/ssl
$ Sudo curl -O http://curl.haxx.se/ca/cacert.pem
$ Sudo mv cacert.pem cert.pem
Andreiの答えは、Mac OSX 10.8.3ではうまくいきませんでした。 Opensslを再インストールしてRuby 2.0をインストールしてから、常にこのエラーが発生しました。Andreiの回答と Railsプロジェクト 。
私が走った:
$ rvm -v
$ rvm get head
# Installation of latest version of rvm...
$ rvm -v
# rvm 1.19.5 (master)
$ rvm osx-ssl-certs status all
# Certificates for /usr/local/etc/openssl/cert.pem: Old.
# Certificates for /Users/mpapis/.sm/pkg/versions/openssl/0.9.8x/ssl/cert.pem: Old.
$ Sudo rvm osx-ssl-certs update all
# Updating certificates...
次に、rvm osx-ssl-certs status all
を再度実行して証明書が正しく更新されたかどうかを確認しましたが、/usr/local/etc/openssl/cert.pem
はまだ更新されませんでした。それが必要かどうかはわかりませんが、次のことを行いました。
$ cd /usr/local/etc/openssl/
$ curl -O http://curl.haxx.se/ca/cacert.pem
$ mv cacert.pem cert.pem
その後、問題は修正されました。同じ問題に出くわした他の人を助けることを願っています。
これは私のために働いた(Mac OS Xで):
$ brew install curl-ca-bundle
$ export SSL_CERT_FILE=/usr/local/opt/curl-ca-bundle/share/ca-bundle.crt
RVM Webサイトでは、rvm osx-ssl-certs update all
代替ソリューション:
[Ruby and Ruby on Rails]を手動でインストールするWin7ユーザーです。
私は同じ問題を抱えていますが、この質問の答えでは解決できません。ちなみに、最後に、私は次のURLによって問題を解決しました
FacebookリダイレクトURL Ruby on Rails open ssl errorhttps://github.com/technoweenie/faraday/wiki/Setting-up-SSL-certificates
Windows 7の場合:上記のNeil Hoffのソリューションリンク(Windows用の修正: https://Gist.github.com/86755 )は、私にとっては機能しませんでした。
動作するものは次のとおりです。
Cmd.exeの使用:
curl -o c:\cacert.pem http://curl.haxx.se/ca/cacert.pem
set SSL_CERT_FILE=c:\cacert.pem
msysgit bashを使用:
curl -o /c/cacert.pem http://curl.haxx.se/ca/cacert.pem
export SSL_CERT_FILE=/c/cacert.pem
Windows 7のコマンドラインにcurlがない場合は、こちらから入手してください。 http://www.confusedbycode.com/curl/#downloads
元のソリューションはここから-クレジット: https://github.com/chef/chef-dk/issues/106
ダン.
Andreiの答えは私のために働いたが、Ruby 1.9.3をインストールしようとすると巨大な障害に遭遇した。 Xcodeの設定を開き、[ダウンロード]タブからコマンドラインツールをインストールするまで。
認証済み gemをご覧ください。説明:
Net/httpsがOpenSSL :: SSL :: VERIFY_PEERを使用してSSL証明書を確認し、OpenSSLが見つからない場合に証明書バンドルを提供するようにします