【发布时间】: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