Я пытаюсь получить доступ к веб-службе 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!