我試圖訪問使用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將不勝感激!