【问题标题】:SSL error on Heroku when using OAuth使用 OAuth 时 Heroku 上的 SSL 错误
【发布时间】:2011-11-16 02:20:10
【问题描述】:

我正在使用 OAuth gem 进行双向 oauth 验证,但是当我尝试使用访问令牌时出现以下错误:

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
/usr/ruby1.9.2/lib/ruby/1.9.1/net/http.rb:678:in `connect'
/usr/ruby1.9.2/lib/ruby/1.9.1/net/http.rb:678:in `block in connect'
/usr/ruby1.9.2/lib/ruby/1.9.1/timeout.rb:44:in `timeout'
/usr/ruby1.9.2/lib/ruby/1.9.1/timeout.rb:87:in `timeout'

代码如下:

uri = construct_uri
consumer = OAuth::Consumer.new("key",
                                 "secret",
                                 :site => "remote site",
                                 :request_token_path => "",
                                 :authorize_path => "",
                                 :access_token_path => "",
                                 :http_method => :get,
                                 :scheme => "query_string"
                                )
access_token = OAuth::AccessToken.new consumer
response = access_token.request(:get, uri)

错误发生在最后一行。这段代码已经工作了几个月,似乎一夜之间就坏了。另外奇怪的是,当我在本地 Rails 控制台中执行该代码时,它可以工作。从我读过的内容来看,我认为这与 OAuth gem 无法找到我的证书的文件路径有关,尽管我不确定从哪里开始在 heroku 上进行调试。在 heroku 上,我们使用的是 SNI SSL。


这里有一个详细的解决方法:https://github.com/intridea/omniauth/issues/404

将 OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE 放入初始化程序中。显然,这是已修复的 OAuth gem 的错误。

【问题讨论】:

  • 既然您已经解决了这个问题,您能否将您的解决方案作为答案并接受它,以供将来参考?
  • 您使用的是哪个版本的 OAuth gem?您在 Celadon Cedar 堆栈上吗?

标签: ruby-on-rails ssl oauth heroku


【解决方案1】:

这里有一个详细的解决方法:https://github.com/intridea/omniauth/issues/404

将 OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE 放入初始化程序中。显然,这是已修复的 OAuth gem 的错误。

【讨论】:

  • 这会禁用证书验证,这会在您的应用程序中打开一个很大的安全漏洞。如果您收到“证书验证失败”错误,您应该将代码指向正确的证书文件或目录。
  • 此外,这会禁用对所有使用 Ruby 的 OpenSSL 的请求的证书验证,而不仅仅是 OAuth。
猜你喜欢
  • 2015-01-14
  • 1970-01-01
  • 2019-01-01
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
  • 2019-01-28
相关资源
最近更新 更多