2010-10-27 84 views
6

我試圖訪問使用Ruby EventMachine進行SSL證書認證的HTTPS Web服務,但我沒有得到它的工作。如何使用SSL客戶端證書獲得HTTPS請求以使用Ruby EventMachine?

我已經寫以下簡單的代碼塊,以測試它端至端:

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 

運行以上輸出<SSL_incomp>接着凸起RuntimeError消息。我試過運行:verify_peer設置爲true和false,它給了我同樣的錯誤。如果沒有:ssl選項,則運行EventMachine::HttpRequest#get的操作相同。

我也嘗試將請求發送到GMail(https://mail.google.com),而沒有:ssl選項(即純粹的HTTPS沒有證書),並且工作,輸出狀態代碼200,標題和正文。

我試圖做與捲曲的Web服務相同的請求和工作原理:

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

我在想,我要麼使用EM-HTTP請求寶石或EventMachine的錯誤或者說,SSL文件的格式與curl協同工作,但不支持EventMachine。

我有人知道如何解決上面的例子或提供一個類似的例子直接使用EventMachine將不勝感激!

回答

2

傳遞給curl的文件--cert的文件同時包含證書和密鑰(除非單獨傳遞--key)。只需使用/tmp/private.key作爲參數都:private_key_file:cert_chain_file

關於這一問題,露出下面的錯誤(而不是隻打印出SSL_incomp)補丁的詳細信息,請參閱http://github.com/eventmachine/eventmachine/issues/#issue/115

相關問題