Ruby EventMachine を使用して SSL 証明書認証を使用する HTTPS Web サービスにアクセスしようとしていますが、うまくいきません。
エンドツーエンドでテストするために、次の簡単なコード ブロックを作成しました。
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
また、オプションなしで (証明書なしの単純な HTTPS) リクエストを GMail ( https://mail.google.com )に送信しようとしました:ssl
が、これは機能し、ステータス コード 200、ヘッダー、および本文が出力されます。
curl を使用して Web サービスに同じリクエストを実行しようとしましたが、うまくいきました。
curl --silent --cert /tmp/private.key --cacert /tmp/ca.pem https://foobar.com/
em-http-request gem または EventMachine を間違って使用しているか、SSL ファイルが curl では機能するが EventMachine では機能しない形式であると考えています。
上記の例を解決する方法を誰かが知っているか、EventMachine を直接使用して同様の例を提供していただければ幸いです。