SSL_connect返回= 1 errno = 0状态= SSLv3读取服务器证书B:证书验证失败

Vik*_*ash 279 ruby ssl ruby-on-rails authlogic facebook-graph-api

我正在使用Authlogic-Connect进行第三方登录.运行适当的迁移后,Twitter/Google/yahoo登录似乎工作正常但Facebook登录引发异常:

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
Run Code Online (Sandbox Code Playgroud)

开发日志显示

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'
Run Code Online (Sandbox Code Playgroud)

请建议..

小智 136

我在尝试使用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.在您的情况下,您希望将其设置为服务器选择它的某个环境变量,或者添加类似于ENV['SSL_CERT_FILE'] = /path/to/your/new/cacert.pemenvironment.rb文件中的内容.

你也可以在CA文件(我没有试过)安装到操作系统-有冗长的说明在这里 -这应该以类似的方式工作,但我还没有尝试过这种个人.

基本上,您遇到的问题是某些Web服务正在使用针对OpenSSL无法验证的CA签名的证书进行响应.

  • `curl-ca-bundle`被[删除](https://github.com/Homebrew/homebrew/pull/28658) (13认同)
  • 我很欣赏使用wget下载curl证书的讽刺意见. (8认同)
  • 我没有/ usr/local/etc/openssl,所以我跑了`sudo curl http://curl.haxx.se/ca/cacert.pem >>/usr/local/etc/cacert.pem`然后`export SSL_CERT_FILE =/usr/local/etc/cacert.pem` (5认同)
  • 是的,这在ruby-1.9.3上运行正常.我把它添加到我的bash配置中.`export SSL_CERT_FILE =/usr/local/etc/openssl/certs/cert.pem` (4认同)
  • 在我的Mac上进行开发我刚刚将`SSL_CERT_FILE =/usr/local/etc/openssl/cert.pem`添加到我的应用程序的`.env`文件中并且瞧 - 很高兴. (4认同)

hta*_*ata 134

如果您在OS X上使用RVM,则可能需要运行此命令:

rvm osx-ssl-certs update all
Run Code Online (Sandbox Code Playgroud)

更多信息请访问:http://rvm.io/support/fixing-broken-ssl-certificates

以下是完整的解释:https://github.com/wayneeseguin/rvm/blob/master/help/osx-ssl-certs.md


更新

在Ruby 2.2上,您可能必须从源重新安装Ruby来修复它.这是如何(替换2.2.3你的Ruby版本):

rvm reinstall 2.2.3 --disable-binary
Run Code Online (Sandbox Code Playgroud)

感谢/sf/answers/2265451821/Ian Connor.

  • 这会工作一段时间,然后失败.对我有用的是运行`rvm重新安装2.2.0 --disable-binary`但是你必须捆绑安装并重新启动. (4认同)
  • 这是一个更全面的文章与替代品:http://railsapps.github.io/openssl-certificate-verify-failed.html (2认同)
  • 这是一个巨大的救星,应该是公认的答案. (2认同)

rya*_*nes 129

以下是如何在Windows上修复它:https://gist.github.com/867550(由Fletcher Nichol创建)

摘抄:

手动方式(镗孔)

cacert.pemhttp://curl.haxx.se/ca/cacert.pem下载该文件.将此文件保存到C:\RailsInstaller\cacert.pem.

现在通过设置让ruby知道您的证书颁发机构包SSL_CERT_FILE.要在当前的命令提示符会话中设置此项,请键入:

set SSL_CERT_FILE=C:\RailsInstaller\cacert.pem
Run Code Online (Sandbox Code Playgroud)

要使其成为永久设置,请在控制面板中添加此设置.

  • 谢谢.这非常有用,而且非常简单. (6认同)

小智 31

Ruby无法找到任何可信任的根证书.

看一下这篇博客文章的解决方案:" Ruby 1.9和SSL错误 ".

解决方案是安装curl-ca-bundle包含Firefox使用的相同根证书的端口:

sudo port install curl-ca-bundle
Run Code Online (Sandbox Code Playgroud)

告诉你的https对象使用它:

https.ca_file = '/opt/local/share/curl/curl-ca-bundle.crt'
Run Code Online (Sandbox Code Playgroud)

请注意,如果您希望代码在Ubuntu上运行,则需要ca_path使用默认证书位置来设置属性/etc/ssl/certs.

  • 这似乎也发生在Windows上,在这种情况下,推荐的解决方案将无法正常工作. (8认同)

小智 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
Run Code Online (Sandbox Code Playgroud)

如果您已经有相关版本,可以使用以下命令重新安装:

rvm reinstall 2.2.0 --disable-binary
Run Code Online (Sandbox Code Playgroud)

(显然,根据需要替换你的ruby版本).

  • 这对El Capitan来说很有用.我破坏了rvm(rvm implode).使用`\ curl -sSL https://get.rvm.io |再次安装 bash -s stable --autolibs = homebrew`然后``rvm install <ruby-version> --disable-binary`有一次我也做了'rvm get head`,因为这些是一些前沿问题. (2认同)

Ste*_*art 20

问题是ruby无法找到要信任的根证书.截至1.9红宝石检查这个.您需要确保以pem文件的形式在系统上拥有卷曲证书.您还需要确保证书位于ruby期望的位置.你可以在...获得这个证书

http://curl.haxx.se/ca/cacert.pem
Run Code Online (Sandbox Code Playgroud)

如果您是RVM和OSX用户,那么您的证书文件位置将根据您使用的ruby版本而有所不同.使用以下命令显式设置路径:ca_path是一个不好的想法,因为您的代码在生产时将无法移植.因为你想在默认位置为ruby提供证书(假设你的开发人员知道他们在做什么).您可以使用dtruss来确定系统在哪里查找证书文件.

在我的情况下,系统正在寻找证书文件

/Users/stewart.matheson/.rvm/usr/ssl/cert.pem
Run Code Online (Sandbox Code Playgroud)

但是MACOSX系统会期望获得证书

/System/Library/OpenSSL/cert.pem
Run Code Online (Sandbox Code Playgroud)

我将下载的证书复制到此路径并且有效.HTH

  • 对于我在Ubuntu 12.04上,有效的证书路径是`〜/ .rvm/usr/ssl/cert.pem` (2认同)

Kev*_*vin 19

新认证的宝石旨在解决这个问题:

https://github.com/stevegraham/certified


小智 18

只需在gemfile中添加gem'certified'并运行bundle install.

  1. 宝石' 认证 '
  2. 捆绑安装


小智 17

在Mac OS X Lion上使用最新的macport:

sudo port install curl-ca-bundle  
export SSL_CERT_FILE=/opt/local/share/curl/curl-ca-bundle.crt  
Run Code Online (Sandbox Code Playgroud)

然后,重新运行失败的作业.

请注意,自从Eric G在5月12日回答以来,证书文件位置似乎已经发生了变化.


Jon*_*han 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"
Run Code Online (Sandbox Code Playgroud)

或者只是这样做:

gem sources -r https://rubygems.org/
gem sources -a http://rubygems.org/
Run Code Online (Sandbox Code Playgroud)

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]
Run Code Online (Sandbox Code Playgroud)


小智 13

这对我有用

rvm pkg install openssl
rvm reinstall 1.9.2 --with-openssl-dir=$rvm_path/usr
Run Code Online (Sandbox Code Playgroud)

openssl实现我的ubuntu 12.04有些问题

  • 这是有效的,但我必须完成这个:`curl -O http:// curl.haxx.se/ca /​​ cacert.pem`,`mv cacert.pem cert.pem`,`mv cert.pem $ rvm_path/USR/ssl` (3认同)

Sco*_*ott 12

这是调试目的的另一个选项.

请确保永远不要在任何生产环境中使用它,因为它会否定首先使用SSL的好处.只在本地开发环境中执行此操作才有效.

require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
Run Code Online (Sandbox Code Playgroud)

  • Downvoted:是的,这有效,但是安装有效CA捆绑并实际解决问题的障碍是如此之低,以至于这样的解决方案 - 几乎完全无效SSL的安全性 - 不是一个应该实施的解决方案,除非你在证书颁发机构完全无法访问的环境中(即使这样,您也应该创建一个可供两个端点访问的本地CA). (26认同)
  • 对于调试来说就足够了 (15认同)
  • 它没有完全删除SSL保护,它完全删除它.永远不要这样做. (10认同)
  • 对于实际的互联网上的生产工作来说,这是一个糟糕的解决方案,但重要的是"你可能根本不使用SSL".通过线路加密的流量优于明确的流量.是的,你有可能进行中间人攻击,但是这些攻击至少要比站在上下的明文流量上的窃听更难以站起来. (2认同)

Quv*_*Quv 12

虽然知道它是一个相当蹩脚的解决方案,但我仍然分享这个,因为看起来很少有人在这里回答使用Windows,我认为一些Windows用户(包括我在内)会欣赏一种简单直观的方法.

require 'openssl'
puts OpenSSL::X509::DEFAULT_CERT_FILE
Run Code Online (Sandbox Code Playgroud)

这告诉你的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在本地磁盘中创建了目录并将一个cert文件放入其中.

Lame原样,这肯定会奏效.

  • 辉煌.Hacky,但这是解决我问题的唯一方法. (2认同)

mon*_*ena 12

我已经尝试安装curl-ca-bundlebrew,但是这个包没有更多:

$ brew install curl-ca-bundle
Error: No available formula for curl-ca-bundle 
Searching formulae...
Searching taps...
Run Code Online (Sandbox Code Playgroud)

在Mac上对我有用的解决方案是:

 $ cd /usr/local/etc/openssl/certs/
 $ sudo curl -O http://curl.haxx.se/ca/cacert.pem
Run Code Online (Sandbox Code Playgroud)

在你的~/.bash_profile(或~/.zshrczsh)中添加这一行:

export SSL_CERT_FILE=/usr/local/etc/openssl/certs/cacert.pem
Run Code Online (Sandbox Code Playgroud)

然后更新您的终端:

$ source ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的解决方案,因为它简单.此外,通过在`〜/ .bash_profile`中引用添加的证书,它会在需要进一步更新时提醒您添加的内容(以及,至关重要的位置). (2认同)

Hen*_*nry 10

在处理Ruby项目时我遇到了同样的问题.我使用的是Windows 7 64位.

我解决了这个问题:

  1. http://curl.haxx.se/ca/cacert.pem下载cacert.pem文件.
  2. 将该文件保存到C:/RubyCertificates/cacert.pem
  3. 然后将我的环境变量"SSL_CERT_FILE"设置为"C:\ RubyCertificates\cacert.pem"

来源:https://gist.github.com/fnichol/867550


Pra*_*hra 7

对我有用的最直接的答案就是这个

sudo apt-get install openssl ca-certificates
Run Code Online (Sandbox Code Playgroud)

瞧!


Syn*_*sis 7

OS X 10.8.x与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
Run Code Online (Sandbox Code Playgroud)

  • curl-ca-bundle从brew中恢复过来 (13认同)

归档时间:

查看次数:

248743 次

最近记录:

7 年,6 月 前