Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails SSL_connect返回=1 errno=0 state=SSLv3读取服务器证书B:证书验证失败_Ruby On Rails_Ruby_Ssl_Authlogic_Facebook Graph Api - Fatal编程技术网

Ruby on rails SSL_connect返回=1 errno=0 state=SSLv3读取服务器证书B:证书验证失败

Ruby on rails SSL_connect返回=1 errno=0 state=SSLv3读取服务器证书B:证书验证失败,ruby-on-rails,ruby,ssl,authlogic,facebook-graph-api,Ruby On Rails,Ruby,Ssl,Authlogic,Facebook Graph Api,我正在使用第三方登录。运行适当的迁移后,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 c

我正在使用第三方登录。运行适当的迁移后,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找不到任何可信任的根证书

请看这篇博文以了解解决方案:“”

解决方案是安装
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


然后,正如这篇博文所暗示的

“”


您可能需要安装
始终验证\u ssl\u证书
gem,该证书允许您为
ca\u文件设置默认值

我在尝试为Rails 3使用JQuery生成器时遇到了类似的问题

我是这样解决的:

  • 获取CURL证书颁发机构(CA)捆绑包。您可以使用:

    • sudo端口安装curl ca bundle
      [如果您使用的是MacPorts]
    • 或者直接把它拉下来http://curl.haxx.se/ca/cacert.pem
  • 执行尝试验证SSL证书的ruby代码:
    SSL\u CERT\u FILE=/opt/local/etc/certs/cacert.pem rails generate jquery:install
    。在您的情况下,您希望将其设置为服务器拾取它的某个环境变量,或者在您的environment.rb文件中添加类似于
    ENV['SSL\u CERT\u FILE']=/path/to/your/new/cacert.pem的内容

  • 您也可以将CA文件(我没有尝试过)安装到操作系统上——有很长的说明——这应该以类似的方式工作,但我个人没有尝试过


    基本上,您遇到的问题是,某些web服务使用OpenSSL无法验证的CA签名的证书进行响应。

    这里有另一个用于调试的选项

    请确保永远不要在任何生产环境中使用此选项,因为它首先会否定使用SSL的好处。只有在您当地的开发环境中这样做才有效。

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

    下面是我所做的,如果你特别对Leopard有问题,我会帮你

    我的证书旧了,需要更新。我下载了这个:

    然后替换了我在Leopard上找到的证书:

    /usr/share/curl/curl-ca-bundle.crt
    

    重新加载正在访问的所有内容,您应该可以开始了

    以下是如何在Windows上修复它:(由Fletcher Nichol创建)

    摘录:

    手动方式(钻孔) 从下载
    cacert.pem
    文件。将此文件保存到
    C:\RailsInstaller\cacert.pem

    现在,通过设置
    SSL\u CERT\u文件
    ,让ruby知道您的证书颁发机构包。要在当前命令提示符会话中设置此选项,请键入:

    set SSL_CERT_FILE=C:\RailsInstaller\cacert.pem
    
    要使其成为永久设置,请将其添加到您的中


    在具有最新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日回答问题以来,证书文件的位置似乎发生了变化。

    只是因为对我有用的说明有点不同,我想我加了2美分:

    我使用OS X Lion并使用macports和rvm

    我安装了curl ca包:

    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
    

    这对我很有效

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

    我的Ubuntu12.04的openssl实现有问题,问题是ruby找不到可信任的根证书。从1.9开始,ruby会检查这一点。您需要确保系统上有pem文件形式的curl证书。您还需要确保证书位于ruby期望的位置。您可以在…处获得此证书

    http://curl.haxx.se/ca/cacert.pem
    
    如果您是RVM和OSX用户,那么您的证书文件位置将根据您使用的ruby版本而有所不同。使用:ca_path显式设置路径是一个坏主意,因为当代码进入生产环境时,它将不可移植。因此,您希望在默认位置为ruby提供一个证书(并且假设您的开发人员知道他们在做什么)。您可以使用DTRUS确定系统在何处查找证书文件

    在我的例子中,系统正在查找中的证书文件

    /Users/stewart.matheson/.rvm/usr/ssl/cert.pem
    
    但是,MACOSX系统希望在

    /System/Library/OpenSSL/cert.pem
    

    我把下载的证书复制到这个路径,它成功了。HTH

    新认证的gem旨在解决以下问题:


    这对我很有效。如果使用rvm和brew:

    rvm remove 1.9.3
    brew install openssl
    rvm install 1.9.3 --with-openssl-dir=`brew --prefix openssl`
    
    OSX解决方案:

    安装最新的rvm稳定版本

    rvm get stable
    
    使用rvm命令自动解决证书问题

    rvm osx-ssl-certs update all
    

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

    rvm osx-ssl-certs update all
    
    更多信息请点击此处:

    下面是完整的解释:


    更新 在Ruby 2.2上,您可能必须从源代码重新安装Ruby才能修复此问题。以下是如何使用Ruby版本替换
    2.2.3


    归功于和。

    对我来说最直接的答案是

    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
    

    我有好几天的麻烦,四处闯荡。事实证明这对我非常有帮助。它帮助我在MacOSX9上成功升级了SSL。

    虽然我知道这是一个相当蹩脚的解决方案,但我仍在分享这一点,因为在这里回答问题的人似乎很少使用Windows,我认为一些Windows用户(包括我)会喜欢一种简单直观的方法

    require 'openssl'
    puts OpenSSL::X509::DEFAULT_CERT_FILE
    
    这会告诉您的openssl在哪里查找证书文件。我的名字不是路易斯,但我的名字是
    C:/Users/Luis/code/luislavena/knap build/var/knapsack/software/x86 windows/opens
    
    require 'openssl'
    puts OpenSSL::X509::DEFAULT_CERT_FILE
    
    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/
    
    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 update
    brew remove openssl
    brew install openssl
    
    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)
    
    $ 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
    
    export SSL_CERT_FILE=/usr/local/etc/openssl/certs/cacert.pem
    
    $ source ~/.bash_profile
    
    rvm install 2.2.0 --disable-binary
    
    rvm reinstall 2.2.0 --disable-binary
    
    rvm install 2.2.0 --disable-binary
    
    OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
    
    1.brew update
    2.brew install openssl