2010-10-27 18 views
6

Ruby EventMachine kullanarak SSL sertifikası kimlik doğrulaması kullanan bir HTTPS web hizmetine erişmeye çalışıyorum ama işe yaramayacağım. kalkık RuntimeError mesajla ardından yukarıdaki çıkışlarını <SSL_incomp> RunningRuby EventMachine ile çalışmak için SSL istemci sertifikalı bir HTTPS isteği nasıl alabilirim?

require 'rubygems' 
require 'em-http' 

EventMachine.run do 
    url = 'https://foobar.com/' 
    ssl_opts = {:private_key_file => '/tmp/private.key', 
    :cert_chain_file => '/tmp/ca.pem', 
    :verify_peer => false} 
    http = EventMachine::HttpRequest.new(url).get :ssl => ssl_opts 

    http.callback do 
    p http.response_header.status 
    p http.response_header 
    p http.response 
    EventMachine.stop 
    end 

    http.errback do 
    EventMachine.stop 
    fail "Request failed" 
    end 
end 

:

Bitmesini uca sınamak için aşağıdaki basit kod bloğunu yazdım

. :verify_peer hem true hem de false ayarıyla çalışmayı denedim ve bana aynı hatayı veriyor. :ssl seçeneği olmadan EventMachine::HttpRequest#get'un çalıştırılması aynı şeyi yapar.

Ben de (sertifika olmadan yani düz HTTPS) :ssl seçeneğinin olmadığı GMail ( https://mail.google.com) isteği gönderme denedim ve o durum kodu 200, başlıkları ve vücudu çıkışı çalışır.

Ben Kıvrık web servisine aynı talebi yapıyor denedim ve o çalışır:

curl --silent --cert /tmp/private.key --cacert /tmp/ca.pem https://foobar.com/ 

Ben yanlış ben de em-http-istek mücevher veya EventMachine kullanıyorum düşünerek veya SSL o am dosyalar, Curl ile birlikte çalışan ancak EventMachine olmayan bir biçimde.

Birisi yukarıdaki örneği nasıl çözeceğimi bilir veya EventMachine'i kullanarak benzer bir örnek sağlamayı çok isterim.

cevap

2

Curl'nin --cert numaralı dosyaya geçirilen dosya hem sertifikayı hem de anahtarı içerir (ayrı olarak --key'u geçmediğiniz sürece). Sadece :private_key_file ve

:cert_chain_file sorunu ve altta yatan hatası (yerine sadece SSL_incomp çıktısını) ortaya bir yama hakkında daha fazla ayrıntı için http://github.com/eventmachine/eventmachine/issues/#issue/115 bakınız hem argüman olarak /tmp/private.key kullanın.