6

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_peertrue と 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 を直接使用して同様の例を提供していただければ幸いです。

4

1 に答える 1

3

curl に渡されるファイル--certには、証明書とキーの両方が含まれます (--key個別に渡さない限り)。と/tmp/private.keyの両方の引数として使用するだけです。:private_key_file:cert_chain_file

問題の詳細と、( SSL_incompを出力する代わりに) 根本的なエラーを公開するパッチについては、http://github.com/eventmachine/eventmachine/issues/#issue/115 を参照してください。

于 2010-10-31T05:17:52.320 に答える