еще одна проблема openssl для windows, которая не помогает VERIFY_NONE - PullRequest
1 голос
/ 30 марта 2011

Я пытаюсь сделать небольшой сценарий ruby ​​для загрузки своего собственного видео. И вот полный код, он довольно короткий:

    require 'openssl'
    OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE # warning: already initialized constant VERIFY_PEER \n 0 
    require 'youtube_it'
    require 'rest-client'

    # Authentication
    auth_devkey      = '...'
    auth_user        = '...'
    auth_pass        = '...'

    # Getting auth token
    response    = RestClient.post "https://www.google.com/accounts/ClientLogin", {:Email => auth_user, :Passwd => auth_pass, :service => "youtube", :source => "..."}, :content_type => 'application/x-www-form-urlencoded'
    auth_token  = response[/(?<=auth=).*/i]
    # so far so good

    # creating a new youtube_it client
    yt_client   = YouTubeIt::Client.new(:username => auth_user, :password =>  auth_pass, :dev_key => auth_devkey)
    # A-Okay


    # Uploading video
    vpath       = "c:/downloads/videos/video.mov"
    upload_response = yt_client.video_upload(File.open(vpath), :title => "test",:description => 'some description', :category => 'People',:keywords => %w[cool blah test], :list => 'denied')

    # big error here
    OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
            from C:/Ruby192/lib/ruby/1.9.1/net/http.rb:677:in `connect'
            from C:/Ruby192/lib/ruby/1.9.1/net/http.rb:677:in `connect'
            from C:/Ruby192/lib/ruby/1.9.1/net/http.rb:637:in `do_start'
            from C:/Ruby192/lib/ruby/1.9.1/net/http.rb:626:in `start'
            from C:/Ruby192/lib/ruby/1.9.1/net/http.rb:1160:in `request'
            from C:/Ruby192/lib/ruby/gems/1.9.1/gems/rest-client-1.6.1/lib/restclient/net_http_ext.rb:17:in `request'
            from C:/Ruby192/lib/ruby/1.9.1/net/http.rb:970:in `post'
            from C:/Ruby192/lib/ruby/gems/1.9.1/gems/youtube_it-1.4.1/lib/youtube_it/request/video_upload.rb:525:in `auth_token'
            from C:/Ruby192/lib/ruby/gems/1.9.1/gems/youtube_it-1.4.1/lib/youtube_it/request/video_upload.rb:463:in `authorization_hea
    ders'
            from C:/Ruby192/lib/ruby/gems/1.9.1/gems/youtube_it-1.4.1/lib/youtube_it/request/video_upload.rb:94:in `upload'
            from C:/Ruby192/lib/ruby/gems/1.9.1/gems/youtube_it-1.4.1/lib/youtube_it/client.rb:99:in `video_upload'
            from (irb):81
            from C:/Ruby192/bin/irb:12:in `<main>'

Я уверен, что смогу сразу же предоставить любую другую информацию, и я мог быскучаю здесь, и это необходимо, чтобы решить это.Я не хочу задавать вопросы здесь без гугла, по крайней мере, 4 часа, но я не могу найти ничего полезного.

Спасибо за миллиард!

Ответы [ 2 ]

1 голос
/ 04 октября 2011

Привет, ребята, эти ошибки были исправлены в последней версии youtube_it, вы можете увидеть здесь

https://github.com/kylejginavan/youtube_it/commit/032f2800ae4c4ab9f6000b23150e3a8d3517815f

regards!

1 голос
/ 30 марта 2011

проблема в том, что вы не можете сделать это:

   OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE 

вы должны изменить атрибут: verify_mode экземпляра SSLContext.вы можете попытаться получить переменную экземпляра объекта NET :: HTTP через instance_variable_get внутри rest-клиента, а затем соответственно установить: verify_mode.

лучший способ - напрямую установить атрибут: verify_ssl остальных-клиент сам:

RestClient::Request.execute(:method => :post, :url => 'http://example.com', :verify_ssl => OpenSSL::SSL::VERIFY_NONE )

для дальнейшего чтения я предлагаю посмотреть на исходный код здесь

...