Problemas de OpenSSL con Ruby 1.9.3

Tengo un problema semigrave con OpenSSL 1.0.1 + Ruby 1.9.3 en Ubuntu 12.04.

Todos los rubíes se instalan con 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)

En Ubuntu 12.04 + Ruby 1.9.3 + Openss 1.0.1 obtengo el siguiente resultado:

% 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>'

Con Ruby 1.8.7 obtengo el resultado correcto:

$ ruby test.rb
opening connection to secure.mmoagateway.com...
opened
<- "POST /api/transact.php HTTP/1.1\r\nAccept: */*\r\nContent-Type: application/x-www-form-urlencoded\r\nConnection: close\r\nContent-Length: 347\r\nHost: secure.mmoagateway.com\r\n\r\n"
<- "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 OK\r\n"
-> "Date: Wed, 04 Jul 2012 01:26:35 GMT\r\n"
-> "Server: Apache\r\n"
-> "Content-Length: 240\r\n"
-> "Connection: close\r\n"
-> "Content-Type: text/html\r\n"
-> "\r\n"
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=

Tengo el mismo problema en arch con 1.9.3 y 1.0.1.

Si instalo 1.0.0e de oneiric en mi sistema 12.04, también funciona bien con ruby ​​1.9.3

Creo que esto puede estar relacionado con el error de ubuntu aquí: https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/965371

Aunque descargué los paquetes de Debian donde dijeron que estaba arreglado y no tuve suerte.

¿Alguien más ha experimentado un problema similar?

preguntado el 04 de julio de 12 a las 02:07

No tengo solución, solo algunos puntos de datos: el problema se reproduce en mi máquina (pruebas de Debian, Ruby 1.8.7 o 1.9.3, openssl 1.0.1b-1). El problema no se reproduce si intento conectarme a un host https diferente. Ah, y no estoy seguro de que los síntomas en ese informe de errores coincidan muy bien con sus síntomas. -

2 Respuestas

Tuve el mismo problema al conectarme a una puerta de enlace de autorización. Al final pude conectarme forzando 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

Respondido el 11 de diciembre de 12 a las 00:12

Ha pasado un tiempo desde que revisé esta publicación, pero. ¡SÍ! esto funciona para mi Parece que debería poder negociar esto por sí solo, pero esto resolverá mi problema. - jeffery pronunciar

Aquí hay una solución que soluciona este problema sin deshabilitar la verificación del certificado: pavel nikolov

Tengo el mismo problema... aquí es información, que rvm pkg install openssl y rvm reinstall 1.9.3-p194 --with-openssl-dir=~/.rvm/usr resuelve el problema, pero no me ayuda

Respondido 18 Jul 12, 17:07

Sí, eso solo funcionó para mí después de una actualización de la versión principal de OSX y los problemas relacionados con brew/macports/... En este caso, podría ayudar a reinstalar Ruby. Tal vez actualizó openssl después de compilar ruby ​​1.9 - marc seeger

todavía no funciona para mí. Tengo la última versión 1.0.1 en el sistema Linux base, también rvm openssl es exactamente igual, probé todas las soluciones posibles, no me resolvieron ... ¿alguna idea? - Terrón

--with-openssl-dir=... no es una opción de configuración válida para 1.9.3: configure: WARNING: unrecognized options: --with-openssl-dir - usuario246672

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.