Ошибка чтения сертификата сервера SSLv3 при использовании Mechanize для входа на flicker.com

Я пытаюсь выполнить следующий код на компьютере с Windows 7, используя Mechanize и Ruby.

require 'mechanize'

a = Mechanize.new { |agent|
  # Flickr refreshes after login
  agent.follow_meta_refresh = true
}

a.get('https://www.flickr.com/') do |home_page|
  signin_page = a.click(home_page.link_with(:text => /Sign In/))
  puts signin_page.uri

  my_page = signin_page.form_with(:id => 'mbr-login-form') do |form|
    username_field = form.field_with(:id => 'login-username')
    username_field.value = 'some_username' 
    password_field = form.field_with(:id => 'login-passwd')
    password_field.value = 'some_password' 
  end.submit
end

Я получаю следующее сообщение об ошибке,

C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/net-http-persistent-2.9.4/lib/net/http/persistent/ssl_reuse.rb:70:in `connect': SSL_connect
SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/net-http-persistent-2.9.4/lib/net/http/persistent/ssl_reuse.rb:70:in `block in
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/timeout.rb:55:in `timeout'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/timeout.rb:100:in `timeout'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/net-http-persistent-2.9.4/lib/net/http/persistent/ssl_reuse.rb:70:in `connect'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/net/http.rb:756:in `do_start'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/net/http.rb:751:in `start'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/net-http-persistent-2.9.4/lib/net/http/persistent.rb:700:in `start'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/net-http-persistent-2.9.4/lib/net/http/persistent.rb:631:in `connection_for'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/net-http-persistent-2.9.4/lib/net/http/persistent.rb:994:in `request'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/mechanize-2.7.3/lib/mechanize/http/agent.rb:259:in `fetch'
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/mechanize-2.7.3/lib/mechanize.rb:440:in `get'
        from first.rb:19:in `<main>'

Я установил драгоценный камень «Сертифицировано», но все еще получаю сообщение об ошибке. Любое понимание?


person Chuchoo    schedule 19.02.2015    source источник


Ответы (2)


Похоже, что большинство компаний отказываются от использования SSLv3, мне пришлось сказать механизам явно использовать ssl_version='TLSv1' для решения проблемы.

a = Mechanize.new {|a| a.ssl_version, a.verify_mode = 'TLSv1',OpenSSL::SSL::VERIFY_NONE}

Спасибо за информацию, представленную в этом сообщении.

person Chuchoo    schedule 20.02.2015
comment
Отлично, что вы нашли решение! Вы должны принять свой ответ, если это то, с чем вы собираетесь. - person JonB; 21.02.2015
comment
Это сработало для меня, но его легче понять в более простом синтаксисе. агент = Mechanize.new agent.ssl_version = 'TLSv1' agent.verify_mode = OpenSSL::SSL::VERIFY_NONE - person user1071182; 27.08.2015

Вы столкнулись с этой проблемой из-за того, что целевой сайт больше не поддерживает SSLv3. Небольшой поиск в Google нашел, что howto-manually-add-trust-cert-to-rubygems.md может Держите свое решение. Заранее извиняюсь, что не использую Ruby в Windows, поэтому не могу воспроизвести. В Linux проблема обычно решается путем обновления openssl, как я ответил в этот пост.

person JonB    schedule 20.02.2015
comment
Спасибо @JonB, я уже пробовал упомянутый вами сайт и прошел все шаги, но все равно получаю то же сообщение об ошибке. все еще ищу обходные пути.. - person Chuchoo; 20.02.2015