SSL_connect返回= 1 errno = 0状态= SSLv3读取服务器证书B:证书validation失败
我正在使用Authlogic-Connect进行第三方login。 运行适当的迁移后,Twitter /谷歌/雅虎login似乎工作正常,但Facebooklogin引发exception:
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'
请build议..
当我尝试使用Rails 3的JQuery生成器时遇到了类似的问题
我解决了这个问题:
-
获取CURL证书颁发机构(CA)包。 你可以这样做:
-
sudo port install curl-ca-bundle
[如果你使用MacPorts的话] - 或直接把它拉下来
wget http://curl.haxx.se/ca/cacert.pem
-
-
执行试图validationSSLauthentication的ruby代码:
SSL_CERT_FILE=/opt/local/etc/certs/cacert.pem rails generate jquery:install
。 在你的情况下,你想要把它设置为一个环境variables,在服务器select它的地方,或者在你的environment.rb文件中添加诸如ENV['SSL_CERT_FILE'] = /path/to/your/new/cacert.pem
类的东西。
您也可以只安装CA文件(我没有尝试过)到操作系统 – 这里有很长的说明 – 这应该以类似的方式工作,但我没有亲自尝试过。
基本上,您遇到的问题是某些Web服务正在响应使用OpenSSL无法validation的CA签名的证书。
如果你在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版本replace2.2.3
):
rvm reinstall 2.2.3 --disable-binary
以下是如何在Windows上修复它: https : //gist.github.com/867550 (由Fletcher Nichol创build)
摘抄:
手动方式(钻孔)
从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
要使其成为永久设置,请将其添加到控制面板中 。
Ruby找不到任何可信的根证书。
看看这个博客文章的解决scheme:“ Ruby 1.9和SSL错误 ”。
解决scheme是安装
curl-ca-bundle
端口,其中包含Firefox使用的相同根证书:sudo port install curl-ca-bundle
并告诉你的
https
对象使用它:https.ca_file = '/opt/local/share/curl/curl-ca-bundle.crt'
请注意,如果您希望代码在Ubuntu上运行,则需要使用默authentication书位置
/etc/ssl/certs
来设置ca_path
属性。
问题是,ruby找不到可信的根证书。 截至1.9ruby检查这一点。 您将需要确保您的系统上有一个pem文件forms的curl证书。 您还需要确保证书位于Ruby预期的位置。 你可以得到这个证书在…
http://curl.haxx.se/ca/cacert.pem
如果您的RVM和OSX用户,那么您的证书文件的位置将根据您使用的ruby的版本而有所不同。 使用:ca_path显式设置path是一个糟糕的想法,因为您的代码在生产时不可移植。 在那里你想提供一个默认位置的ruby证书(并假设你的开发人员知道他们在做什么)。 您可以使用dtruss来确定系统正在查找证书文件的位置。
在我的情况下,该系统正在寻找中的证书文件
/Users/stewart.matheson/.rvm/usr/ssl/cert.pem
不过MACOSX系统会期待一个证书
/System/Library/OpenSSL/cert.pem
我将下载的证书复制到这个path,它工作。 HTH
你在OSX上得到这个错误的原因是rvm安装的ruby。
如果你在OSX上遇到这个问题,你可以在这个博客文章中find一个非常广泛的解释:
http://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html
简短的版本是,对于某些版本的Ruby,RVM会下载预编译的二进制文件,这些二进制文件在错误的位置查找证书。 通过强制RVM下载源代码并在您自己的机器上编译,确保证书位置的configuration是正确的。
执行此操作的命令是:
rvm install 2.2.0 --disable-binary
如果您已经有问题的版本,您可以重新安装它:
rvm reinstall 2.2.0 --disable-binary
(显然,根据需要replace你的ruby版本)。
新的authenticationgem旨在解决这个问题:
在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日回答以来,证书文件的位置似乎已经发生了变化。
一个class轮在pipe理员提示符下为Windows修复它
choco install wget
(首先参见chocolatey.org )
wget http://curl.haxx.se/ca/cacert.pem -OC:\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]
那么这为我工作
rvm pkg install openssl rvm reinstall 1.9.2 --with-openssl-dir=$rvm_path/usr
openssl实现我的Ubuntu 12.04有些问题
只需在您的gemfile中添加gem'certified'并运行bundle install。
- gem' authentication '
- 捆绑安装
我已经尝试使用brew
安装curl-ca-bundle
,但是该软件包没有更多的可用function:
$ 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
)中join这一行:
export SSL_CERT_FILE=/usr/local/etc/openssl/certs/cacert.pem
然后更新你的terminal:
$ source ~/.bash_profile
这是另一个用于debugging的选项。
一定不要在任何生产环境中使用它,因为它首先会否定使用SSL的好处。 只有在你的本地开发环境中才能这样做。
require 'openssl' OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
虽然知道这是一个蹩脚的解决scheme,我仍然分享这个,因为它似乎很less有人回答这里使用Windows ,我认为一些Windows用户(包括我)会欣赏一个简单而直观的方法。
require 'openssl' puts OpenSSL::X509::DEFAULT_CERT_FILE
这告诉你的openssl在哪里寻找证书文件。 我的名字不是路易斯,但是我的名字是C:/Users/Luis/Code/luislavena/knap-build/var/knapsack/software/x86-windows/openssl/1.0.0l/ssl/cert.pem
。 path可能根据每个自己的环境而不同(例如openknapsack
而不是luislavena
)。
即使在通过控制台set SSL_CERT_FILE=C:\foo\bar\baz\cert.pem
后path也没有改变, 所以…我创build了目录 C:\Users\Luis\Code\luislavena\knap-build\var\knapsack\software\x86-windows\openssl\1.0.0l\ssl
放在我的本地磁盘中,并放入一个证书文件。
跛脚,这一定会起作用。
在处理Ruby项目时,我遇到了同样的问题。 我正在使用Windows 7 64位。
我解决了这个问题:
- 从http://curl.haxx.se/ca/cacert.pem下载;cacert.pem文件。
- 将该文件保存到C:/RubyCertificates/cacert.pem
- 然后将我的环境variables“SSL_CERT_FILE”设置为“C:\ RubyCertificates \ cacert.pem”
来源: https : //gist.github.com/fnichol/867550
为我工作的最直接的答案是这样的
sudo apt-get install openssl ca-certificates
瞧!
与自制软件的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
然后,正如这篇博文所示,
“ 如何治愈Net :: HTTP的危险默认HTTPS行为 ”
您可能需要安装always_verify_ssl_certificates
gem,它允许您为ca_file
设置默认值。
这对我有效。 如果你使用rvm和brew:
rvm remove 1.9.3 brew install openssl rvm install 1.9.3 --with-openssl-dir=`brew --prefix openssl`
我遇到了这个问题,并build议修复rvm osx-ssl-certs update all
都不工作,尽pipe我是OSX上的RVM用户。
这个修复工作对我来说是重新安装最新版本的openssl:
brew update brew remove openssl brew install openssl
OSX解决scheme:
安装最新的rvm稳定版本
rvm get stable
使用rvm命令自动解决证书
rvm osx-ssl-certs update all
我通过在terminal运行这个问题解决了这个问题。 全文可以在这里find
rvm install 2.2.0 --disable-binary
如果您在Leopard上遇到问题,那么我所做的就是如此。
我的证书是旧的,需要更新。 我下载了这个:
http://curl.haxx.se/ca/cacert.pem
然后把我在豹上find的证书换成了豹:
/usr/share/curl/curl-ca-bundle.crt
重新加载任何你有访问它,你应该是好的去!
只是因为说明对我来说有点不一样,所以我想我加了2美分:
我在OS X Lion上使用macports和rvm
我安装了curl-ca-bundle:
sudo port install curl-ca-bundle
然后我调整了我的omniauthconfiguration是这样的:
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
如果您在/ 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)
我有一段时间的麻烦,正在黑客周围。 这个链接被certificate对我非常有帮助。 它帮助我在MAC OS X 9上成功升级SSL。
添加gem 'certified', '~> 1.0'
到我的Gemfile
和运行bundle
解决了这个问题。
如果您正在本地运行您的rails应用程序,那么只需在application.rb的底部添加此行即可。
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
在此之后,您可以使用该应用程序没有任何问题。 你可以称它为黑客,但不build议。 仅在需要本地运行时使用
只需运行certified-update
可执行文件,此命令将确保您的所有证书都是最新的。
这在我的Ruby on Rails应用程序中工作。
我不得不重新安装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 。