Как получить HTTPS-запрос с сертификатом клиента SSL для работы с Ruby EventMachine?

Я пытаюсь получить доступ к веб-службе HTTPS, которая использует проверку подлинности сертификата SSL с помощью 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

Выполнение вышеуказанных выходов с последующим появлением сообщения RuntimeError. Я пробовал работать с : verify_peer , установленным как в true, так и в false, и это дает мне ту же ошибку. Выполнение EventMachine :: HttpRequest # get без параметра : ssl делает то же самое.

Я также попытался отправить запрос в GMail ( https: // mail. google.com ) без параметра : ssl (т.е. простой HTTPS без сертификата), и это работает, выводит код состояния 200, заголовки и тело.

Я попытался выполнить тот же запрос к веб-службе с помощью curl, и это сработало:

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

Я думаю, что я либо неправильно использую гем em-http-request или EventMachine, либо файлы SSL имеют формат который работает с curl, но не с EventMachine.

Я был бы очень признателен, если бы кто-то знал, как решить приведенный выше пример или предоставить аналогичный пример с использованием EventMachine!

6
задан the Tin Man 24 September 2013 в 23:52
поделиться