OpenSSL проблемы с Ruby 1.9.3

у меня есть полусерьезная проблема с OpenSSL 1.0.1 + Ruby 1.9.3 на Ubuntu 12.04.

все рубины установлены с rvm

require 'uri'
require 'net/http'
require 'net/https'

endpoint = "https://secure.mmoagateway.com/api/transact.php"
RUBY_184_POST_HEADERS = { "Content-Type" => "application/x-www-form-urlencoded" }
body = "orderid=ae5dd847d9f31209cbffeeea076ed966&orderdescription=Active+Merchant+Remote+Test+Purchase&ccnumber=4111111111111111&ccexp=0913&cvv=123&company=Widgets+Inc&address1=1234+My+Street&address2=Apt+1&city=Ottawa&state=ON&zip=K1C2N6&country=CA&phone=%28555%29555-5555&firstname=&lastname=&email=&amount=1.00&type=auth&username=demo&password=password"
headers = {}

endpoint     = endpoint.is_a?(URI) ? endpoint : URI.parse(endpoint)

http = Net::HTTP.new(endpoint.host, endpoint.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
http.set_debug_output(STDOUT)

result = http.post(endpoint.request_uri, body, RUBY_184_POST_HEADERS.merge(headers))
puts(result)

на Ubuntu 12.04 + Руби 1.9.3 + Openss 1.0.1 я получаю следующий вывод:

% ruby test.rb 
opening connection to secure.mmoagateway.com...
opened
Conn close because of connect error Connection reset by peer - SSL_connect
/usr/lib/ruby/1.9.1/net/http.rb:799:in `connect': Connection reset by peer - SSL_connect (Errno::ECONNRESET)
        from /usr/lib/ruby/1.9.1/net/http.rb:799:in `block in connect'
        from /usr/lib/ruby/1.9.1/timeout.rb:54:in `timeout'
        from /usr/lib/ruby/1.9.1/timeout.rb:99:in `timeout'
        from /usr/lib/ruby/1.9.1/net/http.rb:799:in `connect'
        from /usr/lib/ruby/1.9.1/net/http.rb:755:in `do_start'
        from /usr/lib/ruby/1.9.1/net/http.rb:744:in `start'
        from /usr/lib/ruby/1.9.1/net/http.rb:1284:in `request'
        from /usr/lib/ruby/1.9.1/net/http.rb:1307:in `send_entity'
        from /usr/lib/ruby/1.9.1/net/http.rb:1096:in `post'
        from test.rb:17:in `<main>'

С Ruby 1.8.7 я получаю правильный выход:

$ ruby test.rb
opening connection to secure.mmoagateway.com...
opened
<- "POST /api/transact.php HTTP/1.1rnAccept: */*rnContent-Type: application/x-www-form-urlencodedrnConnection: closernContent-Length: 347rnHost: secure.mmoagateway.comrnrn"
<- "orderid=ae5dd847d9f31209cbffeeea076ed966&orderdescription=Active+Merchant+Remote+Test+Purchase&ccnumber=4111111111111111&ccexp=0913&cvv=123&company=Widgets+Inc&address1=1234+My+Street&address2=Apt+1&city=Ottawa&state=ON&zip=K1C2N6&country=CA&phone=%28555%29555-5555&firstname=&lastname=&email=&amount=1.00&type=auth&username=demo&password=password"
-> "HTTP/1.1 200 OKrn"
-> "Date: Wed, 04 Jul 2012 01:26:35 GMTrn"
-> "Server: Apachern"
-> "Content-Length: 240rn"
-> "Connection: closern"
-> "Content-Type: text/htmlrn"
-> "rn"
reading 240 bytes...
-> "response=1&responsetext=SUCCESS&authcode=123456&transactionid=1648894346&avsresponse=N&cvvresponse=N&orderid=ae5dd847d9f31209cbffeeea076ed966&type=auth&response_code=100&merchant_defined_field_6=&merchant_defined_field_7=&customer_vault_id="
read 240 bytes
Conn close
#<Net::HTTPOK:0xb74175c8>
response=1&responsetext=SUCCESS&authcode=123456&transactionid=1648894346&avsresponse=N&cvvresponse=N&orderid=ae5dd847d9f31209cbffeeea076ed966&type=auth&response_code=100&merchant_defined_field_6=&merchant_defined_field_7=&customer_vault_id=

у меня такая же проблема в arch с 1.9.3 и 1.0.1.

Если я устанавливаю 1.0.0 e из oneiric в моей системе 12.04, он также отлично работает с ruby 1.9.3

Я думаю, что это может быть связано с ошибкой ubuntu здесь:https://bugs.launchpad.net/ubuntu / + источник / openssl/ + ошибка/965371

хотя я загрузил пакеты из Debian, где они сказали, что это исправлено и не повезло.

кто-нибудь еще сталкивался с подобной проблемой?

2 ответов


У меня была такая же проблема с подключением к шлюзу авторизации. В конце концов я смог подключиться, заставив sslv3

http = Net::HTTP.new(uri.host, uri.port)

http.use_ssl = true if @is_https
http.verify_mode = OpenSSL::SSL::VERIFY_NONE if @is_https
http.ssl_version = :SSLv3

у меня такая же проблема... здесь информация о том, что rvm pkg install openssl и rvm reinstall 1.9.3-p194 --with-openssl-dir=~/.rvm/usr решает проблему, но это не поможет мне