From: Martin Bosslet Date: 2011-08-01T00:54:34+09:00 Subject: [ruby-core:38627] [Ruby 1.9 - Bug #5110][Feedback] Ruby SSL error - sslv3 alert unexpected message Issue #5110 has been updated by Martin Bosslet. Category set to ext Status changed from Open to Feedback Assignee set to Martin Bosslet Target version set to 1.9.3 In my opinion Ruby reacts normal here. The OpenSSL::SSL::SSLContext is allocated using "SSLv23" by default for maximum compatibility. Here is what the official doc says: >SSLv23_method: >A TLS/SSL connection established with these methods will understand the SSLv2, SSLv3, and TLSv1 protocol. A client will send out SSLv2 client hello messages and >will indicate that it also understands SSLv3 and TLSv1. A server will understand SSLv2, SSLv3, and TLSv1 client hello messages. This is the best choice when >compatibility is a concern. I checked, the server you mentions does accept v3 client hello messages only, so it does not recognize in particular the v2 message that is sent by default. I'd suggest that it is fine to blame the server for being inflexible in your case. Do you agree? Regards, Martin ---------------------------------------- Bug #5110: Ruby SSL error - sslv3 alert unexpected message http://redmine.ruby-lang.org/issues/5110 Author: Michael Hoisie Status: Feedback Priority: Normal Assignee: Martin Bosslet Category: ext Target version: 1.9.3 ruby -v: ruby 1.9.2p290 I'm running ruby 1.9.2p290 on a machine with OpenSSL version 0.9.8o 01 Jun 2010 When I run the following script: require 'net/http' url = URI.parse('https://www.xpiron.com/schedule') req = Net::HTTP::Get.new(url.path) sock = Net::HTTP.new(url.host, 443) sock.use_ssl = true sock.start do |http| response = http.request(req) end It generates an error: /usr/local/lib/ruby/1.9.1/net/http.rb:678:in `connect': SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: sslv3 alert unexpected message (OpenSSL::SSL::SSLError) from /usr/local/lib/ruby/1.9.1/net/http.rb:678:in `block in connect' from /usr/local/lib/ruby/1.9.1/timeout.rb:44:in `timeout' from /usr/local/lib/ruby/1.9.1/timeout.rb:89:in `timeout' from /usr/local/lib/ruby/1.9.1/net/http.rb:678:in `connect' from /usr/local/lib/ruby/1.9.1/net/http.rb:637:in `do_start' from /usr/local/lib/ruby/1.9.1/net/http.rb:626:in `start' from test.rb:8:in `
' If I add the following line, it works: sock.ssl_version="SSLv3" The HTTPS server seems to be misconfigured, but it may also be an issue with how Ruby's HTTP library negotiates SSL connections. -- http://redmine.ruby-lang.org