簡體   English   中英

連接重置連接 - 打開URL時SSL_connect

[英]Connection reset by peer - SSL_connect when opening a URL

我正在嘗試從BingAds網址下載.zip文件,並且正在努力繞過此錯誤:

Connection reset by peer - SSL_connect

我有這個代碼目前正在通過另一個應用程序生產,但我正在使用nitrous.io在chromebook上的新應用程序和運行他們的默認rails安裝(亞硝酸鹽盒)。

目前在其他應用中使用的代碼:

class BingApi
  def self.get_data(request_params={})
    require 'zip'

    #Acquire Bing report download URL
    report_url = BingApi.acquire_report_url(report_request_id, request_params)

    zip_file = open(report_url)

    unzippedxml = Zip::File.open(zip_file)                      # open zip
    entry = unzippedxml.entries.reject(&:directory?).first      # take first non-directory
    entry.get_input_stream{|is| is.read }          # read file contents
  end

report_url看起來像: httpsreport_url ....

訪問時,它將提示下載.zip文件,我解壓縮然后解析。

但是,使用nitrous box的chromebook上的相同代碼使我Connection reset by peer - SSL_connect錯誤Connection reset by peer - SSL_connect

Errno::ECONNRESET - Connection reset by peer - SSL_connect:                                                                                                                                                                                          
  /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/net/http.rb:920:in `block in connect'                                                                                                                                                    
  /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/timeout.rb:76:in `timeout'                                                                                                                                                               
  /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/net/http.rb:920:in `connect'                                                                                                                                                             
  /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/net/http.rb:863:in `do_start'                                                                                                                                                            
  /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/net/http.rb:852:in `start'                                                                                                                                                               
  /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/open-uri.rb:313:in `open_http'                                                                                                                                                           
  /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/open-uri.rb:724:in `buffer_open'                                                                                                                                                         
  /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/open-uri.rb:210:in `block in open_loop'                                                                                                                                                  
  /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/open-uri.rb:208:in `open_loop'                                                                                                                                                           
  /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/open-uri.rb:149:in `open_uri'                                                                                                                                                            
  /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/open-uri.rb:704:in `open'                                                                                                                                                                
  /home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/open-uri.rb:34:in `open'                                                                                                                                                                 
  lib/bing_api.rb:25:in `get_data'                                                                                                                                                                                                                   
  lib/bing_api.rb:224:in `get_and_parse'   

我一直在嘗試各種不同的解決方案:

zip_file = open(report_url, :ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE)

要么

zip_file = Faraday.get(report_url, :ssl => false)

最后我通過使用以下方法繞過它:

uri = URI.parse(report_url)
https = Net::HTTP.new(uri.host, uri.port)
https.open_timeout = 5
https.use_ssl = true
https.ssl_version = 'SSLv3'
request = Net::HTTP::Get.new(uri.request_uri)
zip_file = https.request(request)

但是我無法將zip_file傳遞給zip_file unzippedxml = Zip::File.open(zip_file)或者我no implicit conversion of Net::HTTPOK into String TypeError。

我錯過了一些簡單的東西嗎? 我應該使用zip_file.class => Net::HTTPOK對象做些不同的事情嗎?

我嘗試調用zip_file.body但是如果你在解壓縮之前嘗試在編輯器中打開壓縮文件,那么返回的內容就像你看到的那樣。

服務器壞了。

它僅支持顯式TLS1.0和SSL3.0握手,不支持常用且最兼容的SSLv23握手。 即使使用明確的TLS1.0握手,如果包含錯誤或過多的密碼,它也會失敗。 來自analyze.pl的相關輸出:

* version SSLv23, no verification, ciphers= -> FAIL! SSL wants a read first
* version SSLv23, no verification, ciphers=HIGH:ALL -> FAIL! SSL wants a read first
* version TLSv1_2, no verification, ciphers= -> FAIL! SSL wants a read first
* version TLSv1_2, no verification, ciphers=HIGH:ALL -> FAIL! SSL wants a read first
* version TLSv1_1, no verification, ciphers= -> FAIL! SSL connect attempt failed error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
* version TLSv1_1, no verification, ciphers=HIGH:ALL -> FAIL! SSL wants a read first
* version TLSv1 no verification, ciphers= -> TLSv1,AES256-SHA
* version TLSv1, no verification, ciphers=HIGH:ALL -> FAIL! SSL wants a read first
* version SSLv3 no verification, ciphers= -> SSLv3,AES256-SHA
* version SSLv3 no verification, ciphers=HIGH:ALL -> SSLv3,AES256-SHA
* supported SSL versions with handshake used and preferred cipher(s):
  * handshake protocols ciphers
  * SSLv23    FAILED: SSL wants a read first 
  * TLSv1_2   FAILED: SSL wants a read first 
  * TLSv1_1   FAILED: SSL connect attempt failed error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number SSL wants a read first 
  * TLSv1     TLSv1     AES256-SHA
  * SSLv3     SSLv3     AES256-SHA

從這里可以看出,SSLv23,TLSv1_2和TLSv1_1握手不起作用,並且TLSv1握手確實有效,但是如果密碼為HIGH則不行:所有(可能包含太多密碼或可能包含意外密碼)。 SSLv3握手然后穩定工作。

瀏覽器通過多次嘗試同時緩慢降級握手中使用的SSL / TLS協議版本來解決此類行為。 但除了瀏覽器之外,其他任何人都沒有這樣做。 因此,除非專門配置為對此服務器使用TLS1.0或SSL3.0握手,否則任何其他應用程序通常都會失敗。

但是我無法將zip_file傳遞給unzippedxml = Zip :: File.open(zip_file),或者我沒有將Net :: HTTPOK隱式轉換為String TypeError。

至少您提供的URL僅返回404未找到。 請檢查您是否確實獲得了ZIP文件。 我不知道這個服務器,但通常這些下載鏈接是動態創建的,並且只有在您之前訪問過其他網站並獲得cookie或類似的東西將URL與瀏覽器會話綁定時才有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM