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

Я пытаюсь получить доступ к веб-сервису HTTPS, использующему аутентификацию SSL-сертификата, используя Ruby EventMachine, но я не могу заставить его работать.

Я написал следующий простой блок кода, чтобы проверить его сквознуюend:

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, и это выдает мне ту же ошибку.Выполнение 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 напрямую приветствуется!

1 Ответ

3 голосов
/ 31 октября 2010

Файл, переданный в curl --cert, содержит как сертификат, так и ключ (если вы не передаете --key отдельно). Просто используйте /tmp/private.key в качестве аргумента для :private_key_file и :cert_chain_file

См. http://github.com/eventmachine/eventmachine/issues/#issue/115 для получения более подробной информации о проблеме и исправлении, которое раскрывает основную ошибку (вместо простой распечатки SSL_incomp).

...