2012-07-04 16 views
10

Tengo un problema semi serio con OpenSSL 1.0.1 + Ruby 1.9.3 en Ubuntu 12.04.Problemas de OpenSSL con Ruby 1.9.3

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 + Rubí 1.9.3 + 1.0.1 Openss me sale 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 me sale la salida correcta:

$ 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 el arco con 1.9.3 y 1.0.1.

Si instalo 1.0.0e de onírico en mi sistema 12.04 también funciona bien con el rubí 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 he descargado los paquetes de Debian donde dijeron que estaba arreglado y no tuvieron suerte.

¿Alguien más ha tenido un problema similar?

+0

tengo ninguna solución, sólo algunos puntos de datos: El problema se reproduce en mi máquina (Debian testing, Ruby 1.8.7 o 1.9.3, 1.0.1b openssl -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 error coincidan con tus síntomas muy bien. –

Respuesta

15

que tenía el mismo problema que conecta a una pasarela de autorización. Al final pude conectar al forzar 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 
+0

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

+0

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

-1

que tienen el mismo problema ... here es la 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

+0

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

+0

todavía no funciona para mí. Tengo el último 1.0.1 en el sistema base de Linux, también rvm openssl es exactamente el mismo, probé todas las soluciones posibles, no resolvió para mí ... ¿Alguna idea? – CLod

+0

'--with-openssl-dir = ...' no es una opción de configuración válida para 1.9.3: 'configure: ADVERTENCIA: opciones no reconocidas: --with-openssl-dir' – Barry

Cuestiones relacionadas