ruby-on-rails SSL_connect返回= 1 errno = 0狀態= SSLv3讀取服務器證書B:證書驗證失敗
如果您在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://stackoverflow.com/a/32363597/4353和Ian Connor 。
我正在使用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'
請建議..
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
。
問題是,紅寶石找不到可信的根證書。 截至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
在帶有最新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日回答以來,證書文件的位置似乎發生了變化。
一個班輪在管理員提示中修復了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]
我嘗試使用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
雖然知道這是一個蹩腳的解決方案,但我仍然在分享,因為在這裡回答的人似乎很少使用Windows ,而且我認為一些Windows用戶(包括我)會喜歡簡單直觀的方法。
require 'openssl'
puts OpenSSL::X509::DEFAULT_CERT_FILE
這告訴你openssl在哪裡查找cert文件。 我的名字不是路易斯,但是我的名字是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
放入我的本地磁盤並放入一個證書文件。
跛腳如此,這一定會奏效。
為我工作的最直接的答案是這樣的
sudo apt-get install openssl ca-certificates
瞧!
然後,正如這篇博文所示,
“ 如何治愈Net :: HTTP的危險默認HTTPS行為 ”
您可能需要安裝always_verify_ssl_certificates
gem,以允許您為ca_file
設置默認值。
我遇到了這個問題,儘管我是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
僅僅因為說明對我而言有些不同,我以為我加了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
如果你在本地運行你的rails應用程序,那麼只需在application.rb的底部添加這行。
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
在此之後,您可以使用該應用程序沒有任何問題。 你可以稱它為黑客,但不建議。 僅在需要在本地運行時使用
將gem 'certified', '~> 1.0'
到我的Gemfile
並運行bundle
解決了我的這個問題。
我不得不重新安裝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 。