1

Ruby 1.9.3-p385 以前では、次のコードを正常に実行できます。

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'
  • 両方のバージョンの Ruby を最新バージョンの rbenv の下にインストールしました
  • OpenSSL 1.0.1e を実行しています
  • OSX 10.8.3 (最新バージョン) を実行しています

Ruby 1.9.3p-385 と 1.9.3-p392 の間で SSL の処理方法に大きな違いはありますか?

基本的に、最終的な目標は、クライアント側から SSL 証明書の詳細を渡さずに、 SSL ( https://secure.example.com )を使用して API エンドポイントに接続することです。理想的には、rest-client Gem を使用してこれを実現できます (これにより、上記のコードと同じエラーがスローされます)。

4

1 に答える 1

0

http.ssl_version = :SSLv3 を設定してみてください。API が別の SSL バージョンを使用している可能性があります。

于 2013-05-14T12:26:49.017 に答える