2012-07-04 13 views
10

Mam półpoważny problem z OpenSSL 1.0.1 + Ruby 1.9.3 na Ubuntu 12.04.Problemy z OpenSSL z Ruby 1.9.3

Wszystkie rubiny są instalowane z 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) 

Na Ubuntu 12.04 + Ruby 1.9.3 + Openss 1.0.1 pojawia się następujący komunikat:

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

z Ruby 1.8.7 otrzymuję prawidłowe wyjście:

$ 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= 

mam ten sam problem w łuku z 1.9.3 i 1.0.1.

Gdybym zainstalować 1.0.0e z sid w moim systemie 12.04 to również działa dobrze z Ruby 1.9.3

myślę, że to może być związane z ubuntu bug tutaj: https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/965371

Chociaż pobrane pakiety z Debiana, gdzie powiedzieli, że został naprawiony i nie miał szczęścia.

Czy ktoś jeszcze miał podobny problem?

+0

nie mam naprawić, tylko niektóre punkty danych: Problem powtarza się na moim komputerze (testowanie Debiana, Ruby 1.8.7 lub 1.9.3 OpenSSL 1.0.1b -1). Problem nie powiedzie się, jeśli spróbuję połączyć się z innym hostem https. Och, i nie jestem pewien, czy symptomy w tym raporcie błędów pasują do twoich symptomów bardzo dobrze. –

Odpowiedz

15

miałem ten sam problem z połączeniem do bramki autoryzacji. W końcu udało mi się połączyć poprzez zmuszanie 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

Minęło trochę czasu odkąd mam sprawdziłem ten post, ale. TAK! to działa dla mnie. Wygląda na to, że powinna być w stanie wynegocjować to samodzielnie, ale to rozwiąże mój problem. –

+0

Oto rozwiązanie, które rozwiązuje ten problem bez wyłączania weryfikacji certyfikatu –

-1

mam ten sam problem ... here jest informacja, że ​​rvm pkg install openssl i rvm reinstall 1.9.3-p194 --with-openssl-dir=~/.rvm/usr rozwiązuje problem, ale to mi nie pomaga

+0

Tak, to działało tylko dla mnie po aktualizacji głównej wersji OSX i połączonych problemów z brew/macports/... W takim przypadku może to pomóc w ponownym zainstalowaniu ruby. Może on zaktualizował openssl po skompilowaniu ruby ​​1.9 –

+0

nadal nie działa dla mnie. Mam najnowszą wersję 1.0.1 na bazowym systemie linux, także rvm openssl jest dokładnie taki sam, wypróbowałem wszystkie możliwe rozwiązania, nie rozwiązałem dla mnie ... żadnego pomysłu? – CLod

+0

'--with-openssl-dir = ...' nie jest poprawną opcją konfiguracyjną dla 1.9.3: 'configure: OSTRZEŻENIE: nierozpoznane opcje: --with-openssl-dir' – Barry

Powiązane problemy