当前位置: 首页 > 知识库问答 >
问题:

OpenSSL::SSL::SSLError在Heroku[复制]

甄霖
2023-03-14

我试图通过Facebook或Twitter验证用户,让他们填写信息,然后单击保存(从而创建用户记录)。我得到一个OpenSSL错误的最后一步-点击保存后。这发生在设计注册控制器#创建方法中。

因此,我在Heroku上托管的Rails应用程序中遇到了这个错误:

2012-07-28T18:25:13+00:00 app[web.1]: OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed)

我见过很多解决方案,但都不奏效。以下是我尝试过的一些事情:

1)安装认证的gem

2)升级Heroku宝石v2.30,再推

3)这:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter, TWITTER_KEY, TWITTER_SECRET, {:client_options => {:ssl => {:ca_file => "/usr/lib/ssl/certs/ca-certificates.crt"}}}
  provider :facebook, FACEBOOK_KEY, FACEBOOK_SECRET, {:scope => "publish_actions,user_location,email", :client_options => {:ssl => {:ca_file => "/usr/lib/ssl/certs/ca-certificates.crt"}}}
end

看起来一个问题可能是这个证书文件实际上并不存在——我在好几个地方见过它,这似乎是Heroku的ca_证书文件的默认路径,但我可能错了。

奇怪的是,这是在我已经通过FB/Twitter进行身份验证,并试图创建用户帐户后发生的。为什么会出现这种情况,我如何解决/调试这种情况?真的很困惑。

更新:我将这一行添加到Omniauth初始值设定项中,现在它“起作用了”。因此,我诊断出问题出在Omniauth上。但是,我希望仍然有SSL验证。。。这显然留下了安全漏洞。

OpenSSL::SSL::VERIFY\u PEER=OpenSSL::SSL::VERIFY\u NONE

共有2个答案

漆雕恺
2023-03-14

听起来您在OmniAuth中获得了正确的openssl配置,但可能您的CA证书路径不正确?

您可以通过运行在heroku服务器上检查:

heroku run bash

... 然后运行openssl以显示正确的路径:

$ openssl version -a
OpenSSL 1.0.0e 6 Sep 2011
OPENSSLDIR: "/usr/lib/ssl"

...您应该可以在$OPENSSLDIR/certs/ca-certificates.crt找到ca_certificates.crt文件

我将确认路径是否与您的代码相匹配。

邢炯
2023-03-14

经过一番搜索,我发现:

如果您使用Ruby通过https(例如Facebook Graph API)打开与外部服务器的连接,则可能会遇到以下错误:

OpenSSL::SSL::SSLError:SSL_connectreturned=1errno=0state=SSLv3readservercertificateB:certificateverifyfailed

此错误是由于Ruby无法找到用于验证安全Web服务器真实性的认证机构证书(CA Certs)。解决方案是将此ca-bundle.crt下载到应用程序的lib//code>目录中:然后将以下代码添加到config/初始化器/fix_ssl.rb:

require 'open-uri'
require 'net/https'

module Net
  class HTTP
    alias_method :original_use_ssl=, :use_ssl=

    def use_ssl=(flag)
      self.ca_file = Rails.root.join('lib/ca-bundle.crt').to_s
      self.verify_mode = OpenSSL::SSL::VERIFY_PEER
      self.original_use_ssl = flag
    end
  end
end

这将迫使ruby使用应用程序lib/目录中的CA包。

取自:http://jimneath.org/2011/10/19/ruby-ssl-certificate-verify-failed.html

更新:

您可能需要使用self。ca_path=而不是self。ca_file=取决于您的系统。

 类似资料:
  • 我正在尝试在CentOS 6.2中运行以下代码(取自codeAcademy): 并获取以下错误消息: /usr/lib/ruby/1.8/net/1.586:在“连接”中:返回SSL_connect=1 errno=0 状态=SSLv3 读取服务器证书 B:证书验证失败(打开SSL:SSL::SSL错误) 密钥被省略了(毕竟它们是秘密的),但是我使用了正确的密钥。必要的宝石安装完毕。 问题可能是什

  • Rails/Ruby/OpenSSL不允许我发送电子邮件,为什么? 控制台中的测试: 结果错误: “SSL\u connect返回=1 errno=0 state=错误:证书验证失败(无法获取本地颁发者证书)(OpenSSL::SSL::SSLError)” 我的证书路径: 我的环境: 铁轨6.1.4.1 红宝石3.0.1p64 OpenSSL 1.1.1f 编辑:这将建立工作连接:

  • 问题内容: 我试图使用通过Python 3 asyncio模块连接到另一方并出现此错误: 问题是错误的含义是什么。我的证书正确, 密钥文件(CA证书)可能不正确 。 问题答案: 假设正在使用版本3.6: 参见:https : //github.com/python/cpython/blob/3.6/Modules/_ssl.c#L3523-L3534 这是说失败了。因此,私钥不正确。 参考可能的版

  • 我试图使用来自Github(https://github.com/gto76/betbrain-scraper)的betbrain.py,其中包含以下代码: 但是,当运行时,它会返回此错误 我怎样才能解决这个问题?我在MacOS 10.12.1上运行Python 3.6.0

  • 问题内容: 我试图按此处所述通过python向iPhone发送推送通知,但出现以下错误: 如回溯所言,该错误是从python ssl模块内部引发的,但该消息对我而言并不正确。有什么想法可能有问题吗? 谢谢, 垫子 编辑: 使用的证书是根据证书和私钥创建的,如下所示: 问题答案: 这是我的工作方式: 从KeyChain内部以格式导出以下两种格式,而无需提供密码: 证书为 下为 在终端中,转到已导出证

  • 问题内容: 我创建了一个自签名证书,将其添加到Heroku,并在Heroku上设置了SSL端点,并且我记录它似乎在那里。 我在Express上创建服务器,如下所示: 然后重定向到这样: 服务器运行正常,但是我在SO上遇到了以下代码片段以创建服务器: 我没有像这个示例那样指向证书/密钥,并且我的站点正在https上运行(尽管锁是红色的,因为它是自签名的)。 所以我的问题是,服务器如何知道我的密钥/证