Я использую гем OAuth для двухсторонней проверки 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 не может найти путь к файлу для моих сертификатов, хотя я не уверен, с чего начать отладку этого на heroku. На героку мы используем SNI SSL.
Здесь подробно описан обходной путь: https://github.com/intridea/omniauth/issues/404
Поместите OpenSSL :: SSL :: VERIFY_PEER = OpenSSL :: SSL :: VERIFY_NONE в инициализатор. По-видимому, это ошибка с гемом OAuth, которая с тех пор была исправлена.