2013-04-11 140 views
1

在Ruby 1.9.3-P385或更早,我可以成功地運行下面的一段代碼:SSL連接錯誤1.9.3-P392 +

require 'uri' 
require 'net/http' 

uri = URI('https://secure.example.com') 

http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true if uri.scheme == 'https' 

http.start do |h| 
    h.request Net::HTTP::Get.new(uri.request_uri) 
end 

在Ruby 1.9.3-P392或以上,我收到以下錯誤:

/Users/jason/.rbenv/versions/1.9.3-p392/lib/ruby/1.9.1/net/http.rb:799:in `connect': Connection reset by peer - SSL_connect (Errno::ECONNRESET) 
    from /Users/jason/.rbenv/versions/1.9.3-p392/lib/ruby/1.9.1/net/http.rb:799:in `block in connect' 
    from /Users/jason/.rbenv/versions/1.9.3-p392/lib/ruby/1.9.1/timeout.rb:54:in `timeout' 
    from /Users/jason/.rbenv/versions/1.9.3-p392/lib/ruby/1.9.1/timeout.rb:99:in `timeout' 
    from /Users/jason/.rbenv/versions/1.9.3-p392/lib/ruby/1.9.1/net/http.rb:799:in `connect' 
    from /Users/jason/.rbenv/versions/1.9.3-p392/lib/ruby/1.9.1/net/http.rb:755:in `do_start' 
    from /Users/jason/.rbenv/versions/1.9.3-p392/lib/ruby/1.9.1/net/http.rb:744:in `start' 
    from /Users/jason/.rbenv/versions/1.9.3-p392/lib/ruby/1.9.1/net/http.rb:557:in `start' 
  • 我已經rbenv的最新版本下安裝了Ruby的兩個版本
  • 我運行OpenSSL的1.0.1e
  • 我正在運行OSX 10.8.3(最新版本)

在Ruby 1.9.3p-385和1.9.3-p392之間如何處理SSL有一些主要區別嗎?

實質上,最終目標是使用SSL連接到某個API端點(https://secure.example.com),而不傳遞來自客戶端的任何SSL證書的詳細信息。理想情況下,我將能夠使用剩餘客戶端Gem來實現此目標(這會引發與上述代碼相同的錯誤)。

+0

過客「VERIFY_NONE」爲OpenSSL的verify_mode似乎並沒有發揮作用 - 我仍然收到此錯誤 – Jason 2013-05-08 14:50:34

+0

你是如何解決這個問題的? – 2016-03-07 07:42:24

+0

@PramodShinde我認爲問題在於我的機器上安裝了OpenSSL。我在新的EC2實例上嘗試了相同的代碼,並設法成功運行該代碼。不是100%確定問題是什麼 – Jason 2016-03-07 11:52:18

回答

0

嘗試設置http.ssl_version =:SSLv3的,它可能是你的API使用不同的SSL版本

+0

感謝您的回覆。我相信這個問題歸結於我的機器上安裝OpenSSL。我在新的EC2實例上嘗試了相同的代碼,並設法成功運行該代碼。仍在調查! – Jason 2013-05-14 16:52:13