我正在使用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'
请建议..
答案 0 :(得分:135)
我在尝试使用Rails 3的JQuery生成器时遇到了类似的问题
我解决了这个问题:获取CURL证书颁发机构(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文件(我没有尝试过)安装到操作系统 - 有冗长的说明here - 这应该以类似的方式工作,但我没有亲自尝试过
基本上,您遇到的问题是某些Web服务正在使用针对OpenSSL无法验证的CA签名的证书进行响应。
答案 1 :(得分:134)
如果您在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才能解决此问题。这是如何(用您的Ruby版本替换2.2.3
):
rvm reinstall 2.2.3 --disable-binary
答案 2 :(得分:129)
以下是如何在Windows上修复它:https://gist.github.com/867550(由Fletcher Nichol创建)
摘录:
手动方式(无聊)
从http://curl.haxx.se/ca/cacert.pem下载
cacert.pem
文件。将此文件保存到C:\RailsInstaller\cacert.pem
。现在通过设置
SSL_CERT_FILE
让ruby知道您的证书颁发机构包。要在当前的命令提示符会话中进行设置,请键入:set SSL_CERT_FILE=C:\RailsInstaller\cacert.pem
要将此设置为永久设置,请在control panel。
中添加此设置
答案 3 :(得分:31)
Ruby无法找到任何可信任的根证书。
请查看此博客文章以获取解决方案:“Ruby 1.9 and the SSL error”。
解决方案是安装包含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
。
答案 4 :(得分:24)
在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版本。)
答案 5 :(得分:20)
问题是ruby无法找到要信任的根证书。截至1.9红宝石检查这个。您需要确保以pem文件的形式在系统上拥有卷曲证书。您还需要确保证书位于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
答案 6 :(得分:19)
新认证的宝石旨在解决这个问题:
答案 7 :(得分:18)
只需在gemfile中添加gem'languified'并运行bundle install。
答案 8 :(得分:17)
在Mac OS X Lion上使用最新的macport:
sudo port install curl-ca-bundle
export SSL_CERT_FILE=/opt/local/share/curl/curl-ca-bundle.crt
然后,重新运行失败的作业。
注意,自从Eric G于5月12日回答以来,证书文件位置似乎已经发生了变化。
答案 9 :(得分:14)
单行内容在管理员提示中为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]
答案 10 :(得分:13)
这对我有用
rvm pkg install openssl
rvm reinstall 1.9.2 --with-openssl-dir=$rvm_path/usr
我的ubuntu 12.04的openssl实现有问题
答案 11 :(得分:12)
这是用于调试目的的另一个选项。
请确保永远不要在任何生产环境中使用它,因为它会否定首先使用SSL的好处。只在本地开发环境中执行此操作才有效。
require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
答案 12 :(得分:12)
我尝试使用127.0.0.1 admin.domain.com
127.0.0.1 login.domain.com
127.0.0.1 www.domain.com
安装curl-ca-bundle
,但该软件包不再可用:
brew
在Mac上对我有用的解决方案是:
$ brew install curl-ca-bundle
Error: No available formula for curl-ca-bundle
Searching formulae...
Searching taps...
在 $ cd /usr/local/etc/openssl/certs/
$ sudo curl -O http://curl.haxx.se/ca/cacert.pem
(或~/.bash_profile
for zsh)中添加此行:
~/.zshrc
然后更新您的终端:
export SSL_CERT_FILE=/usr/local/etc/openssl/certs/cacert.pem
答案 13 :(得分:12)
虽然知道这是一个非常蹩脚的解决方案,但我仍然分享这个,因为似乎很少有人在这里回答使用 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
并将一个证书文件放入它。
Lame原样,这肯定会奏效。
答案 14 :(得分:10)
我在处理Ruby项目时遇到了同样的问题。我使用的是Windows 7 64位。
我通过以下方式解决了这个问题:
答案 15 :(得分:7)
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
答案 16 :(得分:7)
对我来说最直接的答案就是这个
sudo apt-get install openssl ca-certificates
瞧!!!“
答案 17 :(得分:4)
我遇到了这个问题,尽管我是OSX上的RVM用户,但rvm osx-ssl-certs update all
的建议修复无效。
对我有用的修复方法是重新安装最新版本的openssl:
brew update
brew remove openssl
brew install openssl
答案 18 :(得分:4)
这对我有用。如果你使用rvm和brew:
rvm remove 1.9.3
brew install openssl
rvm install 1.9.3 --with-openssl-dir=`brew --prefix openssl`
答案 19 :(得分:4)
我通过在终端中运行此问题来解决此问题。完整写入可在here
上获得Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8)
答案 20 :(得分:4)
然后,正如这篇博文所暗示的那样,
“How to Cure Net::HTTP’s Risky Default HTTPS Behavior”
您可能希望安装always_verify_ssl_certificates
gem,以便为ca_file
设置默认值。
答案 21 :(得分:3)
OSX解决方案:
安装最新的rvm稳定版
rvm get stable
使用rvm命令自动解决证书
rvm osx-ssl-certs update all
答案 22 :(得分:3)
如果您在本地运行rails应用程序,则只需在application.rb。
的底部添加此行OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
在此之后,您可以毫无问题地使用该应用程序。你可以称之为黑客,但不建议这样做。仅在需要本地运行时使用
答案 23 :(得分:2)
对我有用的是答案的组合,即:
# 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
答案 24 :(得分:2)
如果/ 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)
答案 25 :(得分: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
答案 26 :(得分:2)
如果你特意在Leopard上遇到问题,那么这就是我所做的。
我的证书很旧,需要更新。我下载了这个:
http://curl.haxx.se/ca/cacert.pem
然后替换了我在Leopard上找到的证书:
/usr/share/curl/curl-ca-bundle.crt
重新加载你正在访问它的任何东西,你应该好好去!
答案 27 :(得分:1)
使用Ruby 2.3.4遇到此问题:
我解决了卸载OpenSSL并重新安装它的问题。我跑了:
brew uninstall --ignore-dependencies openssl
然后
brew install openssl
它完成了这项工作。
答案 28 :(得分:1)
最新的rubygem-update-2.6.7解决了这个问题。 http://guides.rubygems.org/ssl-certificate-update/
答案 29 :(得分:1)
我不得不重新安装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。
答案 30 :(得分:1)
只需运行certified-update
可执行文件,此命令将确保您的所有证书都是最新的。
这适用于Windows中的Ruby on Rails应用程序。
答案 31 :(得分:1)
将gem 'certified', '~> 1.0'
添加到Gemfile
并运行bundle
为我解决了这个问题。
答案 32 :(得分:1)
有时它并不总是rvm的问题 在MAC OSX中,如果删除.rvm,问题仍然存在(特别是在从timemachine备份数据时),您可以尝试这种方式。
1.brew update
2.brew install openssl
答案 33 :(得分:1)
我遇到了很多天的麻烦,并且正在乱砍。事实证明This link对我非常有帮助。它帮助我在MAC OS X 9上成功升级了SSL。
答案 34 :(得分:0)
将此添加到您的gemfile:
gem 'cliver', :git => 'git://github.com/yaauie/cliver', :ref => '5617ce'
答案 35 :(得分:0)
在Ubuntu上安装以下软件包为我解决了这个问题
sudo apt-get install libssl-dev
答案 36 :(得分:0)
这可能是破解/无效SSL证书的问题。在Mac上,您可以使用此命令更新SSL证书:
rvm osx-ssl-certs update all