ruby-on-rails - SSL_connect返回=1 errno=0狀態=SSLv3讀取服務器證書B:證書驗證失敗




authlogic facebook-graph-api (25)

我正在使用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'

請建議..


Answers

我不得不重新安裝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


如果您在OS X上使用RVM,則可能需要運行以下命令:

rvm osx-ssl-certs update all

更多信息在這裡: http://rvm.io/support/fixing-broken-ssl-certificates : http://rvm.io/support/fixing-broken-ssl-certificates

這裡是完整的解釋: https://github.com/wayneeseguin/rvm/blob/master/help/osx-ssl-certs.md : https://github.com/wayneeseguin/rvm/blob/master/help/osx-ssl-certs.md

更新

在Ruby 2.2上,你可能需要從源代碼重新安裝Ruby來解決這個問題。 以下是如何(用您的Ruby版本替換2.2.3 ):

rvm reinstall 2.2.3 --disable-binary

感謝https://.com/a/32363597/4353和Ian Connor 。


Ruby找不到任何可信的根證書。

看看這篇博文中的解決方案:“ Ruby 1.9和SSL錯誤 ”。

解決方案是安裝curl-ca-bundle端口,其中包含Firefox使用的相同根證書:

sudo port install curl-ca-bundle

並告訴你的https對象使用它:

https.ca_file = '/opt/local/share/curl/curl-ca-bundle.crt'

請注意,如果您希望代碼在Ubuntu上運行,則需要設置ca_path屬性,並使用默認證書位置/etc/ssl/certs


這對我有效。 如果你使用rvm和brew:

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

這是另一個用於調試的選項。

一定不要在任何生產環境中使用它,因為它首先會否定使用SSL的好處。 只有在您的本地開發環境中才能這樣做。

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

在帶有最新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日回答以來,證書文件的位置似乎發生了變化。


gem 'certified', '~> 1.0'到我的Gemfile並運行bundle解決了我的這個問題。


只需在您的gemfile中添加gem'certified'並運行bundle install。

  1. 寶石' 認證 '
  2. 捆綁安裝

一個班輪在管理員提示中修復了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]

在嘗試為Rails 3使用JQuery生成器時遇到了類似的問題

我解決了這個問題:

  1. 獲取CURL證書頒發機構(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文件(我沒有嘗試過)安裝到操作系統 - 這裡有很長的說明 - 這應該以類似的方式工作,但我沒有親自嘗試過。

基本上,您遇到的問題是某些Web服務正在響應使用針對OpenSSL無法驗證的CA簽名的證書。


我遇到了這個問題,儘管我是OSX上的RVM用戶,但rvm osx-ssl-certs update all的建議修復無法正常工作。

對我而言,修復工作是重新安裝最新版本的openssl:

brew update
brew remove openssl
brew install openssl

OSX解決方案:

安裝最新的rvm穩定版本

rvm get stable

使用rvm命令自動解決證書

rvm osx-ssl-certs update all


那麼這對我有用

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

OpenSSL實現我的Ubuntu 12.04有些問題


以下是您如何在Windows上修復它的方法: https://gist.github.com/867550https://gist.github.com/867550 (由Fletcher Nichol創建)

摘抄:

手動方式(鑽孔)

http://curl.haxx.se/ca/cacert.pem下載cacert.pem文件。 將該文件保存到C:\RailsInstaller\cacert.pem

現在通過設置SSL_CERT_FILE讓紅寶石知道你的證書權限包。 要在當前的命令提示符會話中設置此,請鍵入:

set SSL_CERT_FILE=C:\RailsInstaller\cacert.pem

要使其成為永久性設置,請將其添加到控制面板中


僅僅因為說明對我而言有些不同,我以為我加了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

我嘗試使用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

問題是,紅寶石找不到可信的根證書。 截至1.9紅寶石檢查這一點。 您需要確保您的系統上有捲曲證書,並以pem文件的形式出現。 您還需要確保證書位於Ruby預期的位置。 你可以拿到這個證書......

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

如果您的RVM和OSX用戶,那麼您的證書文件位置將根據您使用的Ruby版本而有所不同。 使用:ca_path顯式設置路徑是一個糟糕的想法,因為您的代碼在生產時不可移植。 在那裡你想在默認位置提供一個紅寶石證書(並假設你的開發人員知道他們在做什麼)。 您可以使用dtruss來確定係統正在查找證書文件的位置。

在我的情況下,系統正在尋找中的證書文件

/Users/stewart.matheson/.rvm/usr/ssl/cert.pem

不過MACOSX系統會期望有一個證書

/System/Library/OpenSSL/cert.pem

我將下載的證書複製到這個路徑並且工作。 HTH


你在OSX上得到這個錯誤的原因是rvm-installed 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版本)。


如果您在/ usr / local / etc / openssl中指向cert.pem的符號鏈接,請嘗試執行此操作:

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)



OS X 10.8.x with Homebrew:

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

只需運行certified-update可執行文件,此命令將確保您的所有證書都是最新的。

這適用於我在Windows中的Ruby on Rails應用程序。


當我安裝舊的ruby版本時,我也遇到了這個問題。 當我安裝最新的Ruby版本時,這個問題就消失了。 所以基本上需要更新SSL證書。





ruby-on-rails ruby ssl authlogic facebook-graph-api